繁体   English   中英

JavaScript / jQuery如何正确执行.click功能?

[英]JavaScript/jQuery How to do .click function properly?

我有一些基于所选表单输入动态生成的按钮:

$.each(fields, function (i, field) {
  var field_id = $('[name=' + field.name + ']').closest("fieldset").attr('id');
  $("#results").append('<button id="jumpToThisStep" data-id="'+field_id.replace('q','')+'">'+field.value+ ' ' +'</button>');
});

}

在我的doc.ready函数中,我具有以下内容:

  $('#jumpToThisStep').click(function() {
    var jump_to = $(this).data('id');
    showStep(jump_to);
  });

HTML:

<button id="jumpToThisStep" data-id="0"> ... </button>
<button id="jumpToThisStep" data-id="1"> ... </button>
<button id="jumpToThisStep" data-id="2"> ... </button>

在检查元素时,它们都具有正确的data-id绑定。 但是唯一触发的是第一个。 是什么让其他人无法执行他们的.click

您需要在此处使用事件委托 ,因为您的按钮是动态添加的,因此事件委托将帮助您将click事件附加到这些新创建的按钮上:

$('#results').on('click', '.jumpToThisStep', function() {
    var jump_to = $(this).data('id');
    showStep(jump_to);
});

另外id是唯一的,您需要使用class作为按钮。

HTML DOM id必须是唯一的。 使用class代替。

<button class="jumpToThisStep" data-id="0"> ... </button>
<button class="jumpToThisStep" data-id="1"> ... </button>
<button class="jumpToThisStep" data-id="2"> ... </button>

如果要在文档就绪事件后添加到文档的DOM上绑定事件,则必须使用event delegation

$('#results').on('click', '.jumpToThisStep',function() {
    var jump_to = $(this).data('id');
    showStep(jump_to);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM