我有一个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
隐藏它。