我有一个JS脚本,我直接在网站上使用过一次,在模式内使用过一次。现在我有iOS问题,该功能

$(document).on('click', '.btn-level', function(ev) {})


仅可在模式内使用,而不能直接在网站上使用。如果我使用这个:

 $('.btn-level').click(function(ev) {})


它可以在站点上运行,但不能在模式上运行。

如何编写它以便在两种情况下都可以工作?

最佳答案

您发布的两个表达式之间有很大的不同。

$(document).on('click', '.btn-level', function(ev) {})


绑定到$(document)。在click内的任何$(document)事件上,如果ev.target.btn-level选择器匹配,则执行代码。这意味着即使您单击绑定时DOM中不存在的按钮,也将执行您的代码。

第二种语法

$('.btn-level').click(function(ev) {})


...当您运行绑定功能时,会将一个事件绑定到DOM中存在的每个$('.btn-level')。这意味着,如果您创建更多此类按钮或使用$.ajax()将其带入,则它们将不会绑定任何事件。

这就是为什么如果您希望事件对所有DOM元素(包括DOM中当前不存在的元素)都起作用,则应坚持使用第一种语法。



另一个相当重要的注意事项是,在以下情况下,某些版本的Safari会忽略click事件:


元素是input[type="hidden"]
元素没有cursor:pointer


为了解决这个问题,您可能需要设置

.btn-level { cursor:pointer; }


在CSS中,如果是隐藏输入,则将其更改为任何其他类型,然后使用visibility隐藏它。

09-19 17:15