#javascript #jquery #jquery-events
#javascript #jquery #jquery-события
Вопрос:
Пример кода выглядит следующим образом:
$('a').mousedown(function(event)
{
event.ABC = true;
});
$(window).mousedown(function(event)
{
console.log("event.ABC:",event.ABC);
//outputs "undefined "
if( event.ABC)
{
// do sth
}
else
{
//let it go
}
});
Комментарии:
1. Итак, щелчок
<a>
по элементу приведет к тому, что щелчок по окну больше ничего не будет делать? Это то, что вы хотите?
Ответ №1:
Другие упоминали, что событие jQuery воссоздается для каждого обратного вызова, поэтому любой атрибут, который вы добавляете к событию jQuery, теряется.
Однако событие jQuery имеет originalEvent
атрибут, который сохраняется на протяжении всей фазы распространения события.
Вместо event.ABC
этого вы можете просто сделать event.originalEvent.ABC
.
Примечание: Если вы собираетесь использовать это широко, вы можете добавить атрибут myAppData для хранения всех ваших данных, т. Е. event.originalEvent.myAppData.ABC
. Это упрощает определение того, какие атрибуты события являются вашими пользовательскими, а также снижает вероятность конфликтов имен.
Ответ №2:
Хотя я не совсем уверен, что вы хотите сделать, я предполагаю, что было бы намного проще, если бы вам не приходилось возиться с объектом событий. Просто настройте переменную флага при нажатии на ваши <a>
:
var eventABC = false;
$('a').mousedown(function() {
eventABC = true;
});
$(window).mousedown(function() {
console.log("eventABC:", eventABC);
//outputs true if <a> clicked, false otherwise
if(eventABC) {
// do sth
} else {
//let it go
}
eventABC = false;
});
Но вы можете запускать события в jQuery. Вот так:
$('a').click(function() {
$(window).trigger("eventABC", ['CustomProperty1', 'CustomProperty2']);
return false;
});
$(window).bind('eventABC', function(event, param1, param2) {
alert("eventABC triggered: " param1);
});
Ответ №3:
Проблема, с которой вы столкнулись в своем примере, заключается в том, что объект события создается заново для каждого обратного вызова, это не глобальный объект, который передается каждой функции обратного вызова события.
Вероятно, лучше всего создать свой собственный объект EventArgs на любом подходящем уровне области и добавить к нему все необходимые свойства.
Ответ №4:
Вывод не определен, потому что всякий раз, когда событие запускается, создается новый объект события. Вы только что изменили какой-то другой объект события. И, к сожалению, нет никакого способа сделать это, кроме как переписать jQuery. 😉 Попробуйте использовать некоторые другие (глобальные) переменные / объекты.
Ответ №5:
Вы можете добавить дополнительные данные к объекту события.
$('a').bind('mousedown',{ABC:true},function(event)
alert(event.data.ABC);
});
Однако эти данные будут доступны только внутри этого обработчика событий, а не того, который привязан к окну.
Ответ №6:
попробуйте это
$("*").mousedown(function(e){
e.ABC = "abcdef";
}); //place this code first
и тогда вы можете использовать его так
$("yourSelector").mousedown(function(e){
alert(e.ABC); // >> abcdef
});