Jquery:将几个动态添加的元素绑定到html()事件

时间:2015-03-15 12:50:25

标签: javascript jquery

我在我的页面中有几个下拉列表,这些下拉列表将使用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()更改定义的事件。你能做到吗?还有其他解决方案吗?

感谢。

0 个答案:

没有答案
相关问题