我在我的页面中有几个下拉列表,这些下拉列表将使用AJAX动态更新,这样:
$.ajax({
data: parametros,
url: 'getList.php',
type: 'POST',
success: function (response) {
element.html(response);
}
下拉列表的格式为:
<select id="elemento_1" class="dropdowns">
<select id="elemento_2" class="dropdowns">
<select id="elemento_3" class="dropdowns">
PHP以response
形式响应字符串<option value=1>Bla<option value=45>Ble
,并将其附加到下拉列表中。你明白了。
最初只有一个下拉列表,但只要用户点击一个按钮,就会使用上面的方法添加和加载新的下拉列表,我希望它默认具有与上一个下拉列表相同的值。在阅读有关如何触发html()
事件的答案之后:
https://stackoverflow.com/a/3616565/470994
我将上面的代码更改为以下内容:
$.ajax({
data: parametros,
url: 'getList.php',
type: 'POST',
success: function (response) {
element.html(response).triggerHandler("cambia");
}
$(".dropdowns").unbind().bind("cambia", function() {
var nombre=this.id;
var numero=parseInt(nombre.slice(-1));
alert("Mooooo " + numero);
if (numero > 1) {
var anterior = $("#elemento_" + (numero - 1)).val();
this.find("option[value='" + anterior + "']").prop("selected", "selected").change();
}
});
检查有问题的下拉列表,如果它不是第一个下拉列表,则会获得上一个下拉列表的值并将其加载到当前下拉列表中。
现在,这一切都很好......除了在我的测试中,事件仅在加载第一个下拉列表时触发(alert("Moooo")
仅出现在第一个下拉列表中)。如果我按下按钮,会出现第2,第3 ......下拉菜单,但事件未被触发。我怀疑是因为这里的解释:
https://stackoverflow.com/a/6173263/470994
(bind
仅适用于最初存在的元素,而不适用于稍后添加的元素。
建议的解决方案是使用on()
...但我并不确切知道如何使用它来捕获自定义事件,例如我为html()
更改定义的事件。你能做到吗?还有其他解决方案吗?
感谢。