如何在jquery中生成动态事件?

时间:2015-12-04 16:28:56

标签: javascript jquery

我正在尝试在动态生成的一组下拉列表上设置事件属性,但由于某种原因,事件无效。 Heres是我的代码。

$(document).ready(function () {
  var idRoomTypesList = $("#idRoomTypesList").attr('value').split("_");
  for (var i = 0; i < idRoomTypesList.length; i++) {
    $("#roomTypeID-" + idRoomTypesList[i] + "_nRentedRooms").attr("onchange", generatePrice);
  }
});

var generatePrice = function () {
  alert(this.value().toString());
}

3 个答案:

答案 0 :(得分:1)

我认为这一定对你有用

 $(document).ready(function () {
  var idRoomTypesList = $("#idRoomTypesList").attr('value').split("_");
  for (var i = 0; i < idRoomTypesList.length; i++) {
    $("#roomTypeID-" + idRoomTypesList[i] + "_nRentedRooms").on("change", generatePrice);
  }
});    
    var generatePrice = function () {
      alert($(this).val());
    }

看看这个:  How to use the jQuery Selector in this web application?

答案 1 :(得分:0)

HTML:

<select class="dynamicSelects">
 ....
</select>

JS:

var generatePrice = function () {
  alert(this.value);
};

$(document).ready(function () {
  $('body').on('change', '.dynamicSelects', generatePrice);
});

这是使用jQuery提供的on方法并委派事件的示例。这意味着即使这些下拉不在DOM中,您仍然可以将事件附加到它,并且只要它们存在于DOM中,事件就会触发。它基本上表示将这些事件附加到正文但触发了具有类dynamicSelects的元素。这包括稍后在此类中添加任何其他动态生成的下拉列表。

设置属性以附加事件,虽然它可能有用,但我认为应该使用on方法或普通JS addEventListener来完成。

此外,当在纯DOM元素上操作时,value属性不是函数,因此不需要value()。只需this.value。而且您不需要将其转换为字符串,因为值返回一个字符串。如果它是一个jquery对象,那么你可以做$(this).val()这是一个函数。

我只建议改变当然,因为如果你打算使用像jQuery这样的库,至少要利用它提供的东西。

答案 2 :(得分:0)

您是否搜索过jQuery documentation

$(document).ready(function () {
  var $idRoomTypesList = $("#idRoomTypesList").attr('value').split("_");
  for (var i = 0; i < idRoomTypesList.length; i++) {
    $("#roomTypeID-" + idRoomTypesList[i] + "_nRentedRooms").attr("onchange", generatePrice);
  }

    $( "#idRoomTypesList" ).change(generatePrice());

});

var generatePrice = function () {
  alert(this.value().toString());
}