#javascript #html #swiper #swiperjs #swiper.js
#javascript #HTML #swiper.js
Вопрос:
Я не могу получить значение текстовой области в циклическом swiper Swiper.js .
Вот что я сделал.
- Я определил swiper с одним слайдом и поместил в него текстовую область. (id =»aaa», одна и единственная текстовая область)
- Я определил функцию «GetValue ()», которая показывает значение текстовой области. (используя getElementById(), console.log())
функция GetValue(id){ var element = document.getElementById(id); var value = element.value; console.log(значение); }
- Я включил режим цикла для swiper.
// Swiper Настройка var swiper = new Swiper(‘.swiper-container’, { allowTouchMove: false, цикл: true,
- Я выполнил функцию с помощью кнопки, и она возвращает «» (пустая строка)
- Вот результаты моих экспериментов
- Когда цикл отключен, функция возвращает правильный текст в текстовой области.
- Когда swiper содержит несколько слайдов, функция возвращает «» только для текстовых областей на последнем слайде.
Вот полный код, который повторяет проблему. 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>
Как я могу получить значение текстовой области в циклическом swiper? Пожалуйста, дайте мне знать, если у вас есть какие-либо решения для этого.
Заранее благодарю вас.
Ответ №1:
Проблема здесь в том, что идентификаторы не могут быть продублированы в одном документе, а этот элемент управления дублирует шаблон слайда и его содержимое, поэтому «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, а затем получаем первый объект текстовой области, который содержит. Вот и все!
Посмотрите на предлагаемое решение в JSFiddle: https://jsfiddle.net/s0Lw2yeg/1 /
Я надеюсь, что это будет полезно.
Комментарии:
1. Привет, Карлес. Я действительно ценю ваш ответ. Я не знал, что текстовая область объявлялась несколько раз. Теперь я понимаю, в чем проблема. Спасибо за вашу помощь. Надеюсь, у вас отличный день 🙂