Можно ли добавить настраиваемое свойство для объекта события jquery? - PullRequest
3 голосов
/ 28 октября 2011

Пример кода следующий:

$('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  
        }


    });

Ответы [ 6 ]

5 голосов
/ 21 февраля 2015

Другие упоминали, что событие jQuery создается заново для каждого обратного вызова, поэтому любой атрибут, добавляемый вами в событие jQuery, теряется.

Однако событие jQuery имеет атрибут originalEvent, который сохраняется на протяжении всей фазы распространения события.

Вместо event.ABC вы можете просто сделать event.originalEvent.ABC.

Примечание. Если вы намерены использовать это широко, выможет потребоваться добавить атрибут myAppData для хранения всех ваших данных, например, event.originalEvent.myAppData.ABC.Это позволяет легко определить, какие атрибуты событий являются вашими собственными, а также уменьшает вероятность конфликтов имен.

4 голосов
/ 28 октября 2011

Хотя я не уверен точно, что вы хотите сделать, я предполагаю, что было бы намного проще, если бы вам не пришлось связываться с объектом событий.Просто установите переменную flag, когда ваши <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);
});
1 голос
/ 28 октября 2011

Проблема с вашим примером в том, что объект события создается заново для каждого обратного вызова, а не глобальный объект, который передается каждой функции обратного вызова события.

Лучше всего, вероятно, создать свой собственный объект EventArgs на любом подходящем уровне и добавить в него все необходимые свойства.

0 голосов
/ 27 марта 2017

попробуйте

 $("*").mousedown(function(e){
e.ABC = "abcdef";
}); //place this code first

и тогда вы можете использовать его вот так

$("yourSelector").mousedown(function(e){ alert(e.ABC); // >> abcdef });

Exemple

0 голосов
/ 28 октября 2011

Вы можете добавить дополнительные данные к объекту события.

$('a').bind('mousedown',{ABC:true},function(event)
  alert(event.data.ABC);
});

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

0 голосов
/ 28 октября 2011

Вывод не определен, потому что всякий раз, когда событие инициируется, создается новый объект события.Вы только что изменили какой-то другой объект события.И, к сожалению, нет никакого способа сделать это, кроме как переписать jQuery.;) Попробуйте использовать другие (глобальные) переменные / объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...