2011-12-22 3 views
108

Попытка выяснить, как использовать метод JQuery .on() с определенным селектором, который имеет несколько связанных с ним событий. Ранее я использовал метод .live(), но не совсем уверен, как выполнить тот же подвиг с .on(). Пожалуйста, смотрите мой код ниже:Метод JQuery .on() с несколькими обработчиками событий для одного селектора

$("table.planning_grid td").live({ 
    mouseenter:function(){ 
    $(this).parent("tr").find("a.delete").show(); 
    }, 
    mouseleave:function(){ 
    $(this).parent("tr").find("a.delete").hide();   
    }, 
    click:function(){ 
    //do something else. 
    } 
}); 

Я знаю, что я могу назначить несколько событий по телефону:

$("table.planning_grid td").on({ 
    mouseenter:function(){ //see above 
    }, 
    mouseleave:function(){ //see above 
    } 
    click:function(){ //etc 
    } 
    }); 

Но я считаю, что правильное использование .on() будет выглядеть примерно так:

$("table.planning_grid").on('mouseenter','td',function(){}); 

Есть ли способ сделать это? Или что здесь лучше всего? Я попробовал код ниже, но не кубик.

$("table.planning_grid").on('td',{ 
    mouseenter: function(){ /* event1 */ }, 
    mouseleave: function(){ /* event2 */ }, 
    click: function(){ /* event3 */ } 
}); 

Заранее благодарен!

ответ

211

Это the other way around. Вы должны написать:

$("table.planning_grid").on({ 
    mouseenter: function() { 
     // Handle mouseenter... 
    }, 
    mouseleave: function() { 
     // Handle mouseleave... 
    }, 
    click: function() { 
     // Handle click... 
    } 
}, "td"); 
+1

Почему не является селектором '$ (" table.planning_grid td ")'? – Muers

+10

@Muers, это также сработает, и вопроситель признает это, но также считает, что он должен привязать событие к '

' вместо каждого отдельного элемента'
', что действительно является правильным путем. –

+0

@Frederic - Большое спасибо! Это именно то, что я искал. – butangphp

142

Кроме того, если у вас несколько обработчиков событий, присоединенных к тому же селектору, выполняющей ту же функцию, вы можете использовать

$('table.planning_grid').on('mouseenter mouseleave', function() { 
    //JS Code 
}); 
+3

это то, что я искал – RozzA

+1

, почему это не работает с 'blur' и' change' ??? – Wilf

6

И вы можете комбинировать одни и те же события/функции, таким образом, :

$("table.planning_grid").on({ 
    mouseenter: function() { 
     // Handle mouseenter... 
    }, 
    mouseleave: function() { 
     // Handle mouseleave... 
    }, 
    'click blur paste' : function() { 
     // Handle click... 
    } 
}, "input"); 
7

Я узнал что-то действительно полезное и фундаментальное от here.

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

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

function showPhotos() { 
    $(this).find("span").slideToggle(); 
} 

$(".photos") 
    .on("mouseenter", "li", showPhotos) 
    .on("mouseleave", "li", showPhotos); 
1

Попробуйте с помощью следующего кода:

$("textarea[id^='options_'],input[id^='options_']").on('keyup onmouseout keydown keypress blur change', 
    function() { 

    } 
); 
6

Если вы хотите использовать ту же функцию на разных событиях, можно использовать следующий кодовый блок

$('input').on('keyup blur focus', function() { 
    //function block 
}) 
Смежные вопросы