Javascript 使用$(this)获取数据属性不会返回实际结果
我是javascript/jquery新手,我一直在网上搜索,但没有得到满意的答案。(如果有人能指出类似的问题,我会将其删除) 在hmtl中,我有Javascript 使用$(this)获取数据属性不会返回实际结果,javascript,jquery,Javascript,Jquery,我是javascript/jquery新手,我一直在网上搜索,但没有得到满意的答案。(如果有人能指出类似的问题,我会将其删除) 在hmtl中,我有 <a href="#" class='btn-place-order' data-clicked=false data-confirm-modal="myModal">Submit</a> -->它返回“myModal” 但是当我试着 $(".btn-place-order").on("click", function(e)
<a href="#" class='btn-place-order' data-clicked=false data-confirm-modal="myModal">Submit</a>
-->它返回“myModal”
但是当我试着
$(".btn-place-order").on("click", function(e){ $(this).data("confirm-modal"); });
-->它返回整个对象[a.btn-place-order]
为什么?这种行为完全正确。如果查看jQuery文档,您将看到: .on(事件[,选择器][,数据],处理程序(事件对象))
返回:jQuery .数据(键)
返回:对象 这意味着当您调用
var myObject=$('.btn下订单').data(“确认模式”)代码>将包含数据-
属性的值
但是,当您调用$(“.btn下订单”).on(“单击”时,函数(e){$(this.data(“确认模式”);})代码>返回一个jQuery对象。这个jQuery对象与$(“.btn下订单”)
已经返回的对象是同一个对象,这对于jQuery的链接概念的实现非常重要
链接允许您按顺序执行多个方法,而无需反复获取原始jQuery对象。例如,$(“.btn下订单”)。在('click',…)。在('hover',…)
允许您将两个处理程序(一个单击
和一个悬停
)附加到同一个元素
如果
上的返回任何其他内容也没有意义,因为它只是将处理程序附加到元素上。仅仅因为您附加了一个事件处理程序,它实际上不会给您任何值
现在,如果要在触发事件时执行任何操作,则需要在处理程序的回调
函数中执行该操作。例如
$(".btn-place-order").on("click", function(e){ alert($(this).data("confirm-modal");) });
将提醒用户单击的元素的数据确认模式
属性值。但是,如果没有alert()
部分(即原始代码的编写方式),则只读取值,但不会对其执行任何操作。事件处理程序根本不执行任何操作。它只访问“data”属性的值,然后不处理它。通常情况下,没有事件处理程序应该/可以返回任何内容。您想对数据做什么?@Sergio在HTML5文档中不是必需的。@Pointy,谢谢。删除。工作演示正常工作,其余的我想你已经阅读了上面的大多数评论,有一个很好的答案。:)
很好的答案。非常感谢!
$(".btn-place-order").on("click", function(e){ alert($(this).data("confirm-modal");) });