【发布时间】:2019-07-12 15:20:17
【问题描述】:
我正在尝试摆脱 JQuery。
我有一个名为“clientProfiles”的 div
<div class="paperlist" data-role='listview' data-inset='true' data-split-icon='delete' id='clientProfiles'></div>
我的应用程序会用这样的按钮填充“div”。
function getClientHtml(device) {
var html = "";
html += '<div data-name="' + device.Name + '" data-id="' + device.Id + '"data-app="' + device.AppName + '" style="border-radius: 2px; border: 1px solid rgba(0,0,0,0.158)" class="clientProfile listItem">';
html += '<img style="float-left; width:3%;" src="' + deviceNameImage(device.Name) + '"/>';
html += '<div class="listItemBody">';
html += '<h3 class="listItemBodyText">' + device.Name + ' - ' + device.AppName + '</h3>';
html += '</div>';
html += '<i class="md-icon btnDeleteProfile" data-index="0">close</i>';
html += '</div>';
html += '<br />';
return html;
};
用户添加按钮后的 html 如下所示:
<div class="paperlist" data-role="listview" data-inset="true" data-split-icon="delete" id="clientProfiles">
<div data-name="Xbox One" data-id="mcX7xXZksA1fJooKY2SRS5soNbFgM4lQurFx3bxr2s" data-app="Theater" style="border-radius: 2px; border: 1px solid rgba(0,0,0,0.158)" class="clientProfile listItem">
<img style="float-left; width:3%;" src="../images/devices/xboxone.png"><div class="listItemBody"><h3 class="listItemBodyText">XBLAHBLAHNAME</h3>
</div>
<i class="md-icon btnDeleteProfile" data-index="0">close</i>
</div>
<br>
</div>
这些动态创建的按钮可以从页面中删除,方法是单击主按钮内标有“.btnDeleteProfile”类的图标。
当我想在 JQuery 中向我的“btnDeleteProfile”添加一个点击事件时,我可以使用这个:
$('#clientProfiles', page).on('click', '.btnDeleteProfile', function () {});
但现在我没有使用 JQuery,我遇到了针对“.btnDeleteProfile”的问题。
document.querySelector('.btnDeleteProfile').addEventListener('click', function() {});
但是 MDN 说 querySelector 只会找到第一个实例,而且很可能会创建大量这些按钮,所有这些按钮都附加了不同的配置文件信息。
查询选择器找不到“btnDeleteProfile”。
我遇到的错误是'can't add click event to null.
【问题讨论】:
-
在 stackoverflow 中搜索“没有 jquery 的事件委托”。
on()不是普通的 javascript 方法。 -
对不起,我的意思是 addEventListeners。我仍然无法定位图标。
-
对,因为它不存在。这就是您在 jQuery 中使用绑定的委托形式的原因。
-
在按钮创建时添加事件监听器。不是之前...我想我明白了。
-
不,您没有有这样做,前提是事件冒泡。这就是存在事件委托的原因。 learn.jquery.com/events/event-delegation 同样的逻辑可以在原版 javascript 中完成,但需要做一些工作。
标签: javascript jquery