2010-12-12 2 views
2

Я использую функцию jQuery live(), чтобы изменить цвет рамки текстовых входов формы, чтобы дать пользователям более четкое представление о том, какой элемент они набирают в настоящее время. Мне легче используйте live() более bind(), так как есть определенные случаи, когда новые входы формы вставляются в страницу динамически.jQuery live(), не отображающий текстовый курсор в Firefox

От чтения через jQuery documentation for live() Я понимаю, что каждый обработчик должен возвращать false для предотвращения выполнения других обработчиков. Независимо от того, я или нет, я неправильно истолковываю то, что это на самом деле означает, вот код, который я должен добавить и удалить цвет границы из моих входов формы.

$('input.highlight').live({ 
    focus: function() { 
     $(this).parent('span').addClass('input-focus'); 
     return false; 
    }, 
    blur: function() { 
     $(this).parent('span').removeClass('input-focus'); 
     return false; 
    } 
}); 

Это отлично работает в Chrome и Safari, за исключением Firefox мигающий текстовый курсор не появляется внутри формы ввода, когда он имеет фокус. Если я удалю return false;, это будет показано. Может ли это быть ошибкой jQuery, с которой я столкнулся?

+0

Это связано с тем, что путь .live пузыри вверх и что возвращает false блокирует некоторые события выше по цепочке от действия – Raynos

+0

Так что же Chrome и Safari между мной устанавливают класс цвета границы и возвращают false или после верните, что Firefox нет? – greenie

ответ

1

Эй, у меня была такая же проблема. Я преодолел проблему, добавив $ (this) .focus(); перед возвратом false.

$('input.highlight').live({ 
    focus: function() { 
     $(this).parent('span').addClass('input-focus'); 
     $(this).focus(); 
     return false; 
    }, 
    blur: function() { 
     $(this).parent('span').removeClass('input-focus'); 
     return false; 
    } 
}); 

Надеюсь, что это поможет.