2017-01-17 3 views
0

Так что я знаю, что мы можем иметь несколько обработчиков событий на .on метод()JQuery .он() с несколькими обработчиками событий и нескольких селекторов

$(document).on({ 
    'click': function (e) { 
     // function 
    }, 
    'hover': function (e) { 
     // function  
    } 
}); 

, но в любом случае мы можем добавить несколько селекторов каждый обработчик событий?

так:

$(document).on('click', '#foo, .foo', function() { 
    // function 
}); 

, но с несколькими .on() методы:

$(document).on({ 
    'click', '#foo': function (e) { 
     // doesn't work :(
    }, 
    'hover', '.foo': function (e) { 
     // doesn't work :( 
    } 
}); 

Заранее спасибо

+1

это не действительный объект :) –

+0

так что это не путь, это может быть сделано? – Eli

+0

Если у вас есть разные селекторы для каждого события, почему бы просто не разделить их на свои собственные 'on' - он будет гораздо удобнее обслуживать – Pete

ответ

3

Если вы хотите различные элементы соответствия на различные события, вам нужно используйте разные звонки on. Вы можете использовать один вызов on для подключения нескольких событий для таких же элементов, но вы не можете использовать ни один on для микширования и соответствия событий и селекторов (и нет необходимости).


Можно, конечно, создать свою собственную функцию, которая делает это. Например, что-то смутно, как:

$.fn.mixon = function(events) { 
    Object.keys(events).forEach(function(selector) { 
     var entry = events[selector]; 
     Object.keys(entry).forEach(function(event) { 
      this.on(event, selector, entry[event]); 
     }, this); 
    }, this); 
    return this; 
}; 

... который вы могли бы использовать так:

$(document).mixon({ 
    "#foo": { 
     "click focus": function() { 
      // ... 
     } 
    }, 
    ".foo": { 
     click: function() { 
      // ... 
     } 
    } 
}); 
+0

WOW именно то, что мне нужно, спасибо большое! – Eli

Смежные вопросы