我有一个JS脚本,我直接在网站上使用一次,一次在模态中使用。现在我有iOS问题,该功能
$(document).on('click', '.btn-level', function(ev) {})
仅在模态内部工作,但不能直接在网站上工作。如果我使用这个:
$('.btn-level').click(function(ev) {})
它适用于网站,但不适用于模态。
我怎样才能编写它,使其在两种情况下都能工作?
您发布的两个表达式之间存在重大差异。
$(document).on('click', '.btn-level', function(ev) {})
绑定在$(document)
.在$(document)
内的任何click
事件上,如果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
将其隐藏。