Запуск обработчика событий jQuery, назначенного в другом блоке кода - PullRequest
1 голос
/ 02 июня 2011

У меня есть случай, когда обработчик щелчка определен / назначен в одном блоке кода jQuery (файле), и я хочу вызвать его из другого события щелчка, определенного / назначенного в другом блоке кода jQuery. Как мне это сделать?

Следующий код является сильно упрощенной версией того, что я пытаюсь выполнить. Поведение, которое я хочу видеть, является предупреждением JavaScript «Элемент Один», когда я нажимаю #Element2.

Пример HTML:

<p id="Element1">Element One</p>
<p id="Element2">Element Two</p>

Первый блок кода jQuery:

$(document).ready(function() {
    $('#Element1').click(function() {
        alert('Element One');
    });
});

Второй блок кода jQuery:

$(document).ready(function() {
    $('#Element2').click(function() {
        $('#Element1').click();
    });
});

ОБНОВЛЕНИЕ: Мой оригинальный пример действительно работает. Я опирался на подсказку jQuery UI Dialog и не учитывал обработчик clickoutside , который я использовал. Добавление флажка для второго элемента в моем обработчике 'clickoutside' позволяет отображать диалоговое окно.

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Вам нужно вызвать щелчок при нажатии на первый элемент.Для этого вы можете использовать метод trigger .

function element1Hanlder () {
    alert('Element One');
}

$(document).ready(function() {
    $('#Element1').click(function() {
        alert('Element One');
    });
});

$(document).ready(function() {
    $('#Element2').click(function() {
        $('#Element1').trigger('click');
    });
});
1 голос
/ 02 июня 2011

РЕДАКТИРОВАТЬ: Это основано на предложении «триггера» JohnP (так что вы должны выбрать его в качестве правильного ответа) ...

Если я загружаю этот блок из внешнего файла js ...

$(document).ready(function() {

    $('#Element1').click(function () {
        alert( $(this).text() );
    });

});

Затем загрузите это в тег сценария внутри самого HTML ...

$(document).ready(function() {

    $('#Element2').click(function () {
        $('#Element1').trigger('click');
    });

});

Кажется, что работает как задумано.

...