2012-12-20 1 views
2

Как изменить эти события на .live() обработчик событий?.live() jQuery - как изменить мои события

Я думал, что могу просто изменить $ (document) .ready (function() ... to .... $ (document) .live (function(), а также .keydown и .data для .live, но я не могу заставить его работать ... Помогите пожалуйста.

$(document).ready(function(){ 
       $('#number').bind('keyup change focus', function(){ 
         var field = this; 
         timer = setTimeout(function(){runSearch(field);}, 444);});      
       $('#number').keydown(function(){clearTimeout(timer);});     
       //url selection by specifics     
      $('#phone_book tr').data('bgcolor', '#aaf').hover(function(){ 
       var $this = $(this); 
       var newBgc = $(this).data('bgcolor'); 
      $(this).data('bgcolor', $(this).css('background-color')).css('background-color', newBgc); 
       }); 
       //url selection by specifics 
       $("#phone_book tr").click(function(){ 
         var id = $(this).children().first().html(); 
         var type = $(this).parents('table').siblings('div.module_header').html().toLowerCase(); 
+1

Не меняйте .ready(). Вам нужно только изменить обработчики для элементов, которые не существуют после того, как страница была загружена изначально. Поэтому для каждого динамически добавленного элемента вам нужно будет заменить имя обработчика. НО: Вы должны использовать .on(), потому что скоро будет удален .live(). – devnull69

+0

так .bind, .keydown, .data, .click все должно быть изменено на .on() – Supplement

+0

.data() не является обработчиком событий и, следовательно, его не нужно изменять. .data() хранит или извлекает определенный набор данных в/из указанного объекта (ов) jQuery. – Derek

ответ

1

Ниже приведен пример вашего кода с функцией .on.

$(document).ready(function(){ 
     $('#number').on('keyup change focus', function(){ 
      var field = this; 
      timer = setTimeout(function(){runSearch(field);}, 444);});      
      $('#number').keydown(function(){clearTimeout(timer);});     
       //url selection by specifics 

      $('#phone_book tr').data('bgcolor', '#aaf').hover(function(){ 
        var newBgc = $(this).data('bgcolor'); 
        $(this).data('bgcolor', $(this).css('background-color')).css('background-color', newBgc);}); 
       //url selection by specifics 
      $("#phone_book tr").on('click', function(){ 
        var id = $(this).children().first().html(); 
        var type = $(this).parents('table').siblings('div.module_header').html().toLowerCase(); 
6

изменение

.bind(... 

в

.on(... 

.live() на самом деле не рекомендуется.

Для них, как .keyup(), .keydown(), изменение тех .on ('KeyDown' ... и т.д.

+0

Обратите внимание, что для этого требуется больше, чем просто изменение .bind .on, вам также необходимо делегировать от родителя. –

+0

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

+0

Вопрос конкретно задает вопрос о том, как перейти на .live, который предлагает делегированные события. –

1

Изменение .bind() для .live()

Keep в виду, что live() устарел в новых версиях jQuery, и вы должны использовать вместо него(). Некоторые из ваших событий могут также потребовать более старый метод delegate().

$('#number').live('keyup change focus', function(){ 
    var field = this; 
    timer = setTimeout(function(){runSearch(field);}, 444);});      
    $('body').delegate('#number', 'keydown', function(){clearTimeout(timer);});     
     //url selection by specifics     
     $('body').data('bgcolor', '#aaf').delegate('#phone_book tr', 'hover, function(){ 
      var $this = $(this); 
      var newBgc = $(this).data('bgcolor'); 
      $(this).data('bgcolor', $(this).css('background-color')).css('background-color', newBgc); 
    }); 
+0

не может получить событие .data() для работы после нажатия клавиши и появляются новые результаты. – Supplement

+0

.data() не является событием - вы говорите о hover()? –

+0

извините, а не функция данных ... да hover – Supplement

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

  • Нет связанных вопросов^_^