Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.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 如何在集合中的项上触发jQuery事件(集合的第一个元素来自$.\u data()的意外jQuery结果)_Javascript_Jquery - Fatal编程技术网

Javascript 如何在集合中的项上触发jQuery事件(集合的第一个元素来自$.\u data()的意外jQuery结果)

Javascript 如何在集合中的项上触发jQuery事件(集合的第一个元素来自$.\u data()的意外jQuery结果),javascript,jquery,Javascript,Jquery,我正在尝试自动单击表格列的标题,以便表格在页面加载时自动排序。(该表由汇流插件注入,因此我们无法轻松控制其内容、排序或CSS。) 表中的每个都有class=“sortableHeader”。使用jQuery获取标题项集: $('th.sortableHeader') 返回预期的jQuery对象数组,如果我这样做,那么获取与数组中第一项相关联的事件就可以了: $._data( $('th.sortableHeader')[0], "events") 对象{mousedown:Array[1],

我正在尝试自动单击表格列的标题,以便表格在页面加载时自动排序。(该表由汇流插件注入,因此我们无法轻松控制其内容、排序或CSS。)

表中的每个
都有
class=“sortableHeader”
。使用jQuery获取标题项集:

$('th.sortableHeader')
返回预期的jQuery对象数组,如果我这样做,那么获取与数组中第一项相关联的事件就可以了:

$._data( $('th.sortableHeader')[0], "events")
对象{mousedown:Array[1],mouseup:Array[1]} mousedown:数组[1] 鼠标:数组[1] 原型:对象

当然我不能对那个家伙调用
.trigger()
,因为他不是jQuery对象。因此,我尝试使用
.first()
.slice(0,1)
获取相同的对象(我认为),但这就是事情变得奇怪的地方:

$._data( $('th.sortableHeader').first(), "events")
未定义

未定义


我本以为倒数第二名会产生与第一名相同的结果。有人能解释为什么这些事件没有出现吗?(显然,如果事件没有显示,那么我就不能
.trigger()
触发它们!)

为什么不等待插件加载完成,然后在您想要的元素上触发您想要的事件呢

这将使用sortableHeader类选择所有th元素,然后过滤掉除第一个元素以外的所有元素。这将返回一个jQuery对象

$('th.sortableHeader').first().trigger('click');

这与此相同,但会返回一个DOM对象,因此要使其成为jquery对象,可以将其包装在jquery选择器中

var mySelection = $('th.sortableHeader')[0];
$(mySelection).trigger('click');

要查找事件(和处理程序),您已经解决了以下问题:

$._data( $('th.sortableHeader')[0], "events");
这将返回保存在jQuery中的事件对象,但您不需要“需要”它们来触发它们,jQuery在
.trigger()
中抽象了该部分

如果您真的想惹麻烦,请尝试以下方法:

var ev = $._data( $('th.sortableHeader')[0], "events");
// ev is now an object of events
ev.mouseup.forEach(function(obj) {
    obj.handler();
});

演示:

我两个都试过了。第二个错误是因为[0]是DOM对象,而不是jQuery对象,所以您会得到“TypeError:[0]。触发器不是函数”。第一个似乎不起作用,我相信这是因为如果你问jQuery
.first()
的事件是什么,你会得到
未定义的
(参见我的操作)。
$。\u(
需要一个dom节点。因此,
.first
.slice
将不起作用。您的第一次尝试成功了,这正是您所需要的。
.trigger
与此有什么关系?从$.\u数据获取事件与触发事件无关……就是这样。谢谢。
$._data( $('th.sortableHeader')[0], "events");
var ev = $._data( $('th.sortableHeader')[0], "events");
// ev is now an object of events
ev.mouseup.forEach(function(obj) {
    obj.handler();
});