从另一个对象的单击事件中手动触发jQuery单击事件

时间:2011-12-19 19:18:39

标签: jquery event-handling scope

我正在开发一个小型网络应用,点击一个div(称之为“A”)需要更改自身和另一个div的位置(称之为“B”),反之亦然。

功能会像这样:

Click 'A' {
  A is moved some number of pixels closer to the mouse position (making use of jQuery's .pageX and .pageY event object properties)
  B's click event is manually triggered, moving it some number of pixels closer to the mouse
}

我想我只是将点击事件处理程序绑定到A& B.如果A被点击,我会手动触发B的点击事件(使用jQuery的.trigger(),反之亦然。不幸的是,从另一个对象的处理程序中手动触发一个对象的click事件对我不起作用 - 例如上面的例子,我在触发div B的点击事件时无法检索pageX和pageY属性。

我在这里举了一个例子来说明这一点:http://jsfiddle.net/tZFNk/2/

欢迎并提前感谢您的帮助。

5 个答案:

答案 0 :(得分:6)

你拼错了#34;问题"。尝试:

$('#aQuestion').trigger('click');

而不是

$('#aQestion').trigger('click');

答案 1 :(得分:2)

$('#aQuestion').click();

$("#aQuestion").trigger('click');

你有一个错字

http://jsfiddle.net/tZFNk/7/

答案 2 :(得分:2)

使用第一个事件的pageX和pageY属性触发事件。

$('#aQuestion').bind('click', function(e, f){
    // Use the original pageX property if it exists, else use pageX set by triggered event.
    if (e.pageX !== undefined) {
        alert('x-pos: ' + e.pageX + ', y-pos: ' + e.pageY);
    } else {
        alert('x-pos: ' + f.pageX + ', y-pos: ' + f.pageY);
    }
});

$('#aDiv').bind('click',function(e){
    // Trigger event on #aQuestion with the current click coordinates.
    $('#aQuestion').trigger('click', { pageX: e.pageX, pageY: e.pageY });
    alert('Nothing happens!')
});

http://jsfiddle.net/tZFNk/20/

答案 3 :(得分:1)

事件属性似乎没有正确传播,因为nachito已经在他的回复中找到了。但是,您不必为新对象构造和赋值,只需在触发器函数中传递'e'对象:

$('#aQuestion').bind('click',function(e, evt){
    var pageX = e.pageX || evt.pageX;
    var pageY = e.pageY || evt.pageY;
    alert('x-pos: ' + pageX + ', y-pos: ' + pageY);
});

$('#aDiv').bind('click',function(e){
    $('#aQuestion').trigger('click', e);
    alert('Nothing happens!')
});

答案 4 :(得分:0)

    $(document).ready(function(){

        $("#button2").each(function(){
            var buttonOld = this;
            $('#button1').bind('click',function(){$(buttonOld).trigger('click')});
        })
    })
相关问题