Swiper.js: 无法在循环模式下获取文本区域值

Swiper.js: cannot get textarea value in loop mode

我无法在 Swiper.js 的循环滑动器中获取文本区域的值。

这是我所做的。

  1. 我定义了一个带有单张幻灯片的滑动器,并在其中放置了一个文本区域。 (id="aaa",一个且唯一的文本区域)

  2. 我定义了一个显示文本区域值的函数“getValue()”。 (使用 getElementById(),console.log())

    函数getValue(id){ var 元素 = document.getElementById(id); 变量值 = element.value; console.log(值); }

  3. 我开启了滑动条的循环模式

    // 滑动设置 var swiper = new Swiper('.swiper-container', { 允许触摸移动:假, 循环:真,

  4. 我用一个按钮执行了函数,它returns“”(空字符串)

  5. 这是我的实验结果

这是复制问题的完整代码。 https://jsfiddle.net/mjn7d385/

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>test</title>

    <!-- Link Swiper's CSS -->
    <link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.css">
    <link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css">

    <!-- Demo styles -->
    <style>
        html,
        body {
            position: relative;
            height: 100%;
        }

        body {
            background: #eee;
            font-size: 14px;
            color: #000;
            margin: 0;
            padding: 0;
        }

        .swiper-container {
            width: 100%;
            height: 100%;
        }

        .swiper-slide {
            text-align: center;
            font-size: 18px;
            background: #fff;

            /* Center slide text vertically */
            display: -webkit-box;
            display: -ms-flexbox;
            display: -webkit-flex;
            display: flex;
            -webkit-box-pack: center;
            -ms-flex-pack: center;
            -webkit-justify-content: center;
            justify-content: center;
            -webkit-box-align: center;
            -ms-flex-align: center;
            -webkit-align-items: center;
            align-items: center;
        }

        .swiper-pagination-bullet {
            width: 20px;
            height: 20px;
            text-align: center;
            line-height: 20px;
            font-size: 12px;
            color: #000;
            opacity: 1;
            background: rgba(0, 0, 0, 0.2);
        }

        .swiper-pagination-bullet-active {
            color: #fff;
            background: #007aff;
        }
    </style>

</head>

<body>
    <!-- Swiper -->
    <div class="swiper-container">
        <div class="swiper-wrapper">
            <div class="swiper-slide" id="page1">
                <textarea name="aaa" id="aaa" cols="40" rows="5"></textarea>
                <button onclick="getValue('aaa');">Check Values</button>
            </div>
        </div>
        <!-- Add Pagination -->
        <div class="swiper-pagination"></div>
        <!-- Add Arrows -->
        <div class="swiper-button-next"></div>
        <div class="swiper-button-prev"></div>
    </div>

    <!-- Swiper JS -->
    <script src="https://unpkg.com/swiper/swiper-bundle.js"></script>
    <script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>

    <script>
        // Swiper Setting
        var swiper = new Swiper('.swiper-container', {
            allowTouchMove: false,
            loop: true,
            pagination: {
                el: '.swiper-pagination',
                renderBullet: function (index, className) {
                    return '<span class="' + className + '">' + (index + 1) + '</span>';
                },
            },
            navigation: {
                nextEl: '.swiper-button-next',
                prevEl: '.swiper-button-prev',
            },
        });

        function getValue(id){
            var element = document.getElementById(id);
            var value = element.value;
            console.log(value);
        }
        
    </script>

</body>

</html>

如何获取循环滑动器中文本区域的值?如果您对此有任何解决方案,请告诉我。

提前谢谢你。

这里的问题是Id不能在同一个文档中重复,而这个控件复制了Template Slide及其内容,所以多次声明了“aaa”。一种解决方案可能是这个:

修改幻灯片模板为:

<div class="swiper-slide" id="page1">
    <textarea cols="40" rows="5"></textarea>
    <button onclick="getValue(this);">Check Values</button>
</div>

此处,getValue() 是使用调用者对象(按钮)作为参数调用的。

现在getValue函数修改为:

function getValue(obj){
    var element = obj.parentElement.getElementsByTagName("textarea")[0];
    var value = element.value;
    console.log(value);
}

在这个函数中,我们定位到按钮的父对象,也就是DIV,然后我们得到第一个包含的textarea对象。就是这样!

查看 JSFiddle 中建议的解决方案: https://jsfiddle.net/s0Lw2yeg/1/

希望对您有所帮助。