语义 UI:动态添加的下拉菜单不会更改 select 中的值
Semantic UI: Dynamically added dropdown menu doesn't change value in select
在使用语义 UI 框架时,我正在处理可以动态添加多个项目的表单。
这些项目的形式是一个下拉菜单,我需要监听它的变化。这非常适用于页面加载时初始化的下拉菜单,但不适用于动态添加的下拉菜单。
为了找出我的问题,我创建了这个 JSFiddle:https://jsfiddle.net/e7q1shyv/1/
语义 UI 下拉菜单似乎没有更新 <select>
。
我尝试查看文档并四处搜索,但没有找到任何相关信息。
感谢您提供解决此问题的任何想法!
检查工作代码。
$(document).ready(function() {
$('select').dropdown();
});
$(document).on('change', 'select', function() {
var valu = $(this).val();
$('span').html(valu);
});
$('button').click(function() {
$('select').first().clone().appendTo('.selects')
$('select').dropdown();
});
.ui.button {
margin-top: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.1/semantic.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.1/semantic.js"></script>
<div class="selects">
<select class="ui dropdown">
<option>Option 1</option>
<option>Option 2</option>
</select>
</div>
<button class="ui button">Add select</button>
<p>Value changed: <span></span></p>
你所做的只是获取 select 元素的值,所以它每次都会获取 dom.
中 select 的第一个实例的值
如果你像我写的那样给当前元素的值 var valu = $(this).val();
它将获取当前元素的值。
这是您更新后的 jsfiddle link.
只需将 $('select')
更改为 $(this)
,如下所示,效果完美:
$(document).on('change', 'select', function(){
$('span').html($(this).val())
});
你这行有错误。
$(document).on('change', 'select', function(){
$('span').html($('select').val())
});
此处您使用的是 'select' 的值,它始终对应于 select 的 class 中的第一个 select 元素。将其更改为 $this 以获取当前实例值。
您的代码将更改为
$(document).on('change', 'select', function(){
$('span').html($(this).val())
});
工作 fiddle - https://jsfiddle.net/e7q1shyv/3/
在使用语义 UI 框架时,我正在处理可以动态添加多个项目的表单。
这些项目的形式是一个下拉菜单,我需要监听它的变化。这非常适用于页面加载时初始化的下拉菜单,但不适用于动态添加的下拉菜单。
为了找出我的问题,我创建了这个 JSFiddle:https://jsfiddle.net/e7q1shyv/1/
语义 UI 下拉菜单似乎没有更新 <select>
。
我尝试查看文档并四处搜索,但没有找到任何相关信息。
感谢您提供解决此问题的任何想法!
检查工作代码。
$(document).ready(function() {
$('select').dropdown();
});
$(document).on('change', 'select', function() {
var valu = $(this).val();
$('span').html(valu);
});
$('button').click(function() {
$('select').first().clone().appendTo('.selects')
$('select').dropdown();
});
.ui.button {
margin-top: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.1/semantic.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.1/semantic.js"></script>
<div class="selects">
<select class="ui dropdown">
<option>Option 1</option>
<option>Option 2</option>
</select>
</div>
<button class="ui button">Add select</button>
<p>Value changed: <span></span></p>
你所做的只是获取 select 元素的值,所以它每次都会获取 dom.
中 select 的第一个实例的值如果你像我写的那样给当前元素的值 var valu = $(this).val();
它将获取当前元素的值。
这是您更新后的 jsfiddle link.
只需将 $('select')
更改为 $(this)
,如下所示,效果完美:
$(document).on('change', 'select', function(){
$('span').html($(this).val())
});
你这行有错误。
$(document).on('change', 'select', function(){
$('span').html($('select').val())
});
此处您使用的是 'select' 的值,它始终对应于 select 的 class 中的第一个 select 元素。将其更改为 $this 以获取当前实例值。
您的代码将更改为
$(document).on('change', 'select', function(){
$('span').html($(this).val())
});
工作 fiddle - https://jsfiddle.net/e7q1shyv/3/