Jquery:更改下拉列表的值.通过委托事件触发时
Jquery: change value of a dropdown... when triggered through a delegate event
>我有两个下拉列表,我希望当用户更改第一个下拉列表时,第二个下拉列表会自动更新为相同的值。由于一些复杂的原因,我必须通过on()
委托事件触发更改。我的代码是这样的:
<form>
<select id="destino_1">
<option value="268">AAA</option>
<option value="409">BBB</option>
<option value="570">CCC</option>
<option value="895">DDD</option>
<option value="943">Arena</option>
</select>
<select id="origen_2" class="origen">
<option value="268">AAA</option>
<option value="409">BBB</option>
<option value="570">CCC</option>
<option value="895">DDD</option>
<option value="943">Arena</option>
</select>
</form>
我的Javascript是这样的:
$("body").on('change',"#destino_1", function(){
$("#origen_2").trigger("cambiaOrigen");
});
$('body').on('cambiaOrigen', '.origen', function() {
var nombre=this.id;
var numero=parseInt(nombre.slice(-1));
//alert("Mooooo " + nombre);
if (numero > 1) {
var anterior = $("#destino_" + (numero - 1)).val();
this.find("option[value='" + anterior + "']").prop("selected", "selected").change();
//this.val(anterior);
}
});
我在 http://jsfiddle.net/w7c4o4cd/创造了一个小提琴
如您所见,事件被正确触发,代码获取第一个下拉列表的值......但是我无法更改第二个下拉列表的值。我尝试了两种方式:与
this.find("option[value='" + anterior + "']").prop("selected", "selected").change();
还有this.val(anterior);
.他们都不起作用。在浏览器中执行时,我在控制台中遇到的错误是this.find
和this.val()
不是函数......然而,如果您尝试显示 this.id
,似乎this
正确地引用了第二个下拉列表,而不是说,body
.(另外,如果我尝试显示this
,它说它是一个"HTML selectElement")。
这是怎么回事?
在你的cambiaOrigen
处理程序中,this
指的是一个节点而不是一个jQuery对象,你想要的是$(this)
。
此外,要设置select
标签的选定选项,您只需设置其值即可
this.value = anterior;
http://jsfiddle.net/mowglisanu/w7c4o4cd/2/
$("body").on('change',"#destino_1", function(){ $("#origen_2").trigger("cambiaOrigen");
});
$('body').on('cambiaOrigen', '.origen', function() {
var nombre=this.id;
var numero=parseInt(nombre.slice(-1));
//alert("Mooooo " + nombre);
if (numero > 1) {
var anterior = $("#destino_" + (numero - 1)).val();
//alert("Meeeept " + anterior);
//alert (this);
this.value = anterior;
//this.val(anterior);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<form>
<select id="destino_1">
<option value="268">AAA</option><option value="409">BBB</option><option value="570">CCC</option><option value="895">DDD</option><option value="943">Arena</option>
</select>
<select id="origen_2" class="origen">
<option value="268">AAA</option><option value="409">BBB</option><option value="570">CCC</option><option value="895">DDD</option><option value="943">Arena</option>
</select>
</form>
只需更改此行
this.find("option[value='" + anterior + "']").prop("selected", "selected").change();
对此
$(this).find("option[value='" + anterior + "']").prop("selected", "selected").change();
只需像这样根据第一个的值设置部分下拉列表的值即可。
$("body").on('change', "#destino_1", function () {
$('#origen_2').val($(this).val());
});
$("body").on('change', "#destino_1", function () {
$('#origen_2').val($(this).val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<select id="destino_1">
<option value="268">AAA</option>
<option value="409">BBB</option>
<option value="570">CCC</option>
<option value="895">DDD</option>
<option value="943">Arena</option>
</select>
<select id="origen_2" class="origen">
<option value="268">AAA</option>
<option value="409">BBB</option>
<option value="570">CCC</option>
<option value="895">DDD</option>
<option value="943">Arena</option>
</select>
</form>
相关文章:
- 当触发下拉列表的onchange事件时,使用JavaScript提交表单
- 将onclick事件附加到具有一个元素的下拉列表中
- Jquery:更改下拉列表的值.通过委托事件触发时
- 如何在 PHP 中使用 OnChange 事件的下拉列表中选择一个选项后,对大量数据行设置分页
- MVC 下拉列表更改事件未正确调用控制器中的操作
- OnChange 事件使用 React JS 作为下拉列表
- 在Selectize.js下拉列表中的附加按钮上添加点击事件
- javascript的事件监听器将下拉列表转换为输入按钮
- 保留动态创建的下拉列表's在事件窗口.history.back()上选择的值-JavaScript
- 更改URL并保留“更改”事件下拉列表中的值
- 单击更改下拉列表中的事件
- 在复选框取消选中事件中从HTML下拉列表中删除项目
- 在JavaScript中更改下拉列表索引后,ASP.Net提交按钮单击事件不起作用
- 下拉列表的 SelectedIndexChanged 事件在从客户端填充时不会触发
- 将选项视为选择下拉列表中的单击事件
- 如何触发 HTML 选择单击事件(使用选项激活选择下拉列表)
- 如何在iOS6中关闭选择器的onchange事件下拉列表
- 如何在更改事件下拉列表中访问HiddenField值
- Jquery多个onchange事件-下拉列表和输入文本
- 无法在onClick()事件下拉列表中单击锚标记