Копировать обработчики событий одного элемента на другого?

Ответ от @Khalid Taha правильный.

Однако для моего конкретного случая я мог бы использовать JSONObject. Что было не так, так это то, как я это использовал.

Если я получаю доступ к данным таким образом, это работает:

JSONObject additionalData = receivedResult.payload.additionalData;

, а затем я могу получить отдельные параметры, например, так:

final String notificationType = additionalData.optString("notification_type");

Вероятно, свойство additionalData является встроенное свойство уведомлений.

10
задан Kaspar Lee 31 May 2016 в 15:56
поделиться

5 ответов

Вы не можете легко (и вероятно не был должен) "копировать" событие. То, что можно сделать, использовать ту же функцию для обработки каждого:

var clickHandler = function() { alert('click'); };
// or just function clickHandler() { alert('click'); };

$('#firstEl').click(clickHandler);

// and later
$('#secondEl').click(clickHandler);

Кроме того, Вы могли на самом деле уволить событие за первый элемент во втором обработчике:

$('#firstEl').click(function() {
    alert('click');
});

$('secondEl').click(function() {
    $('#firstEl').click();
});

Править: @nickf волнуется по поводу загрязнения глобального пространства имен, но этого можно почти всегда избегать путем обертывания кода в объекте:

function SomeObject() {
    this.clickHandler = function() { alert('click'); };
}
SomeObject.prototype.initFirstEvent = function() {
    $('#firstEl').click(this.clickHandler);
};
SomeObject.prototype.initSecondEvent = function() {
    $('#secondEl').click(this.clickHandler);
};

или обертывание Вашего кода в анонимной функции и вызов его сразу:

(function() {
    var clickHandler = function() { alert('click'); };
    $('#firstEl').click(clickHandler);
    $('#secondEl').click(clickHandler);
})();
4
ответ дан 3 December 2019 в 17:22
поделиться

Вы могли бы интересоваться triggerHandler методом

// here's where the magic happens 
//$('#secondEl').click = $('#firstEl').click; // ????
$('#secondEl').click(function() {
    $('#firstEl').triggerHandler('click');
});
2
ответ дан 3 December 2019 в 17:22
поделиться

Это то, что Вы ищете?

var clickHandler = function() { alert("Handled!"); }
$('#firstEl').click(clickHandler);
$('#secondEl').click(clickHandler);
0
ответ дан 3 December 2019 в 17:22
поделиться

$ ('#secondEl') .click = $ ('#firstEl') .click.bind ($ ('#secondEl'));

Принятие Вас использует Прототип JS (http://www.prototypejs.org/api/function/bind)

-3
ответ дан 3 December 2019 в 17:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: