分配jQuery的事件动态按钮的最佳方法(Best way to assign Jquery eve

2019-10-29 13:01发布

我生成动态根据用户动作(长篇)Twitter的引导模态。 比方说,有些时候用户就可以看到他的屏幕上100个模态。 在每个模式我有5个动态的按钮,每个按钮都有它自己的目的,并没有在所有的情态动词一样,并有不同的ID的。

我通过使用jQuery附加的onclick事件到这些按钮时,曾经有一个新的Twitter模式通过使用按钮ID如下打开

$(document).on("click","#btn"+btnNumber, function(){
   //Code Goes Gere
});

所以,如果我打开100个模态,各有5个按钮,这是好主意,为500次分配的单击事件?

或者是好主意,用它来分配click事件的name属性为1次如下

$(document).ready(function(){
    $(document).on("click","btnNameAttr", function(){
       //Code Goes Gere
    });
});

Answer 1:

jQuery的上()可以帮助你在这。 首先,你需要分离数据添加到您喜欢的元素ID btn+btnNumber 。 您可以添加任何自定义信息data-x属性像data-custom-info ,并使用jQuery的attr('data-custom-info')语法来检索信息。 注册的事件处理程序on()方法也可用于未来的元素(脚本执行后创建的元素)。 如下图所示。

当创建新的按钮,添加呈现为..

<input .... class="btnWithData" data-custom-info="1" ... />
<input .... class="btnWithData" data-custom-info="2" ... /> 

和你的事件处理程序是这样..

$(document).ready(function(){
 $('body').on('click','.btnWithData',function(){
//DO WHATEVER
var buttonData=$(this).attr('data-custom-info');
//DO WHATEVER
 });
});


Answer 2:

你应该使用指定委派事件侦听器 jQuery.on()方法@ Ananthan,乌尼建议,但形式:

$.on('click', 'button', listener)    

在这种情况下,你不需要分配唯一的ID或属性。 您可以使用标签的名称或类名作为选择器(第二个参数)。

看看这里: https://api.jquery.com/on/和阅读委派事件



Answer 3:

最好是不要使用闭他们需要的内存。 依靠良好的旧数据标签,而不是:

$(document).ready(function () {
  $("#wrapper").on("click", "btnNameAttr", function () {
    var n;

    n = $(this).data("number");
    // code goes here
  });
});

为了区分内部实际点击的元素#wrapper使用data-number属性是这样的:

<div id="wrapper">
  <img data-number="000" />
  <img data-number="001" />
  <img data-number="002" />
  <img data-number="003" />
</div>

此代码将执行好得多,你仍然可以有通过包装你想要的所有功能<div>元素和data-number=""属性。 而你不干扰classid属性,你可能已经对这些元素。

你甚至可以添加命令到标签:

<img data-number="000" data-command="edit" />
<img data-number="000" data-command="show" />
<img data-number="000" data-command="delete" />

并在其上进行切换:

switch ($(this).data("command"))
{
  case "edit":
    // edit element with number n here
    break;
}


文章来源: Best way to assign Jquery events to Dynamic buttons