Запуск события jQuery click вручную из события click другого объекта - PullRequest
3 голосов
/ 19 декабря 2011

Я работаю над небольшим веб-приложением, в котором нажатие на один 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's.trigger () и наоборот. К сожалению, ручное инициирование события click для одного объекта из обработчика другого объекта не работает для меня - например, в приведенном выше примере я не могу получить свойства pageX и pageY при запуске divСобытие щелчка B.

Я включил пример, чтобы проиллюстрировать этот момент здесь: http://jsfiddle.net/tZFNk/2/.

Приветствия и заранее спасибо за вашу помощь.

Ответы [ 5 ]

6 голосов
/ 19 декабря 2011

Вы ошиблись словом «вопрос». Попробуйте:

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

вместо

$('#aQestion').trigger('click');
2 голосов
/ 19 декабря 2011

Запустить событие, используя свойства 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/

2 голосов
/ 19 декабря 2011
$('#aQuestion').click();

или

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

у вас есть опечатка

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

1 голос
/ 19 декабря 2011

Свойства события, похоже, не распространяются правильно, как 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!')
});
0 голосов
/ 31 июля 2013
    $(document).ready(function(){

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