2017-09-08 207 views
0

我试图创建一个函数来鼠标点击元素。传递元素(作为jQuery对象)作为参数功能

让我们考虑$(element).click()了这个问题的范围,现在,我想创建这样说:

function mouseClick() { 
    var event = new MouseEvent('click', { 
     'view': window, 
     'bubbles': true, 
     'cancelable': true 
    }); 

    var element = document.getElementById('elementId'); 
    element.dispatchEvent(event); 
} 

mouseClick(); 

的问题是:

当我尝试元素作为参数传递给这个函数(作为jQuery对象),当我打电话时:

function mouseClick(element) { 
    var event = new MouseEvent('click', { 
     'view': window, 
     'bubbles': true, 
     'cancelable': true 
    }); 

    //var element = document.getElementById('elementId'); <==== I want to remove this to replace it with the arguments when I call it; 
    element.dispatchEvent(event); 
} 

var element = $('#elementId'); 
mouseClick(element); 

我得到控制台错误:

Uncaught TypeError: element.dispatchEvent is not a function

但是当我选择用getElementById它的工作内容:

var element = $('#elementId'); //<==== this doesn't work; 
var element = document.getElementById('elementId'); //<==== this works; 
mouseClick(element); 

这究竟是为什么?

我该如何使jQuery选择器的方式工作?

基本上我想选择超出ID选择器的更高级的元素,所以我认为jQuery很方便,写得更少。

+1

'dispatchEvent'是一个DOM方法,而不是一个jQuery的方法。 – Barmar

+0

jQuery有一个类似于'dispatchEvent'的'trigger'方法。 – Barmar

+0

@Barmar请你举个例子说明如何使用jQuery'trigger'? – user7607751

回答

0

jQuery对象与DOM元素不同,您通常无法调用相同的方法(有些情况下,它们具有相同的名称,例如submit())。 dispatchEvent()是一种DOM方法,不是jQuery方法,因此您无法在jQuery对象上调用它。

你可以从使用get()方法的jQuery对象的DOM元素,所以你可以做:

mouseClick(element.get(0)); 

您也可以使用下标作为快捷方式:

mouseClick(element[0]); 
0

的结果一个jquery选择器不是一个DOM元素,所以你不能使用displayEvent就可以了。

你可以在所有的元素在你的jquery选择器和事件套用派遣他们中的每一个:

Object.keys(element).forEach(function(key) { 
    element[key].dispatchEvent(event); 
}); 
相关问题