Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用$(this)获取数据属性不会返回实际结果_Javascript_Jquery - Fatal编程技术网

Javascript 使用$(this)获取数据属性不会返回实际结果

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)

我是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){ $(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");) });