2014-01-24 6 views
3

Я пытаюсь изменить класс некоторых элементов ввода во время некоторых событий мыши, но работают только события mouseover и mouseout, что может быть причиной этой проблемы?События Jquery не работают

$(document).ready(function(){ 
     $('.registerFormElements').mouseover(function(){ 
       this.className='bright'; 
     }); 
     $('.registerFormElements').mouseout(function(){ 
       this.className=''; 
     }); 
     $('.registerFormElements').focus(function(){ 
      this.className='bright'; 
     }); 
     $('.registerFormElements').blur(function(){ 
      this.className=''; 
     }); 
    }); 
+0

его прохладное и рабочий чувак http://jsfiddle.net/AdqzA/1/ –

+0

Ваш код работает и для фокуса и размытия: http: // jsfiddle.net/6mHL3/ - но нет смысла снимать класс с мыши, потому что в поле все еще может быть фокус ... По-моему, определенные обработчики, с которыми вы привязываетесь, действительно не работают вместе, чтобы создать разумный пользовательский опыт. – nnnnnn

+0

Он не работает на моем локальном хосте, и я не мог понять причину этого. – Tartar

ответ

1

можно связать множество событий и посмотреть на Event.type и переключать класс, который Вы хотите:

$(document).ready(function(){ 
    $('.registerFormElements').on('focus mouseenter mouseleave blur', function(e) { 
     var element = $(this); 
     var shouldHaveBright = e.type === 'focus' || e.type === 'mouseenter'; 
     var hasFocus = element.is(':focus'); 

     element.toggleClass('bright', shouldHaveBright || hasFocus); 
    }); 
}); 
+0

это вызывает ту же проблему – Tartar

+0

@Tartar, какой элемент '.registerFormElements'? – voigtan

+0

все они вводят текст – Tartar

3

Попробуйте использовать код:

$(this).attr('class', ''); 

или

$(this).attr('class', 'myClass'); 

и вы можете слишком

$(this).addClass('myClass'); 
$(this).removeClass('myClass'); 
1

Ваши Jqueries могут быть противоречивыми: -

var $j = jQuery.noConflict(); 

$j(document).ready(function(){ 
    $j('.registerFormElements').mouseover(function(){ 
      this.className='bright'; 
    }); 
    $j('.registerFormElements').mouseout(function(){ 
      this.className=''; 
    }); 
    $j('.registerFormElements').focus(function(){ 
     this.className='bright'; 
    }); 
    $j('.registerFormElements').blur(function(){ 
     this.className=''; 
    }); 
}); 
+0

Это должно работать, но почему код OP не работал? – nnnnnn

+0

@nnnnnn dats хороший момент. г гениальность. – Anup

+0

На самом деле код OP [работает для меня] (http://jsfiddle.net/6mHL3/). – nnnnnn

1

Это, кажется, работает для меня. Проверьте, не имеют ли в них имена типов. Кроме того, в фокусе вы имеете в виду вкладку на вход? Это то, что вызывает фокус-события.

Смотрите мою скрипку:

http://jsfiddle.net/AdqzA/

$('.registerFormElements').mouseover(function(){ 
     this.className='bright'; 
    }); 
    $('.registerFormElements').mouseout(function(){ 
     this.className=''; 
    }); 
    $('.registerFormElements').focus(function(){ 
     this.className='bright'; 
    }); 
    $('.registerFormElements').blur(function(){ 
     this.className=''; 
    }); 
+0

http://jsfiddle.net/AdqzA/2/ да, это работает ..! – Anup

+0

У меня есть 5 элементов ввода. Я думаю, что это может быть причиной того, почему ваш пример jsfiddle работает. В вашем примере есть 1 элемент ввода. – Tartar

+0

Почему бы вам не попробовать с 5, тогда ... ладно, вот вы здесь: http://jsfiddle.net/AdqzA/3/ И он все еще работает - вы можете вставлять вкладки между ними, и они подсвечиваются. – WheretheresaWill

3
$(document).ready(function(){    
     var classname= 'bright';  
     /*Can create a variable so that you can use it later. By creating variable we can avoid searching in entire dom again*/ 
     var formElement = $(".registerFormElements");  
     /*Used chaining*/ 
     formElement.on("mouseover focus", function() {      
      $(this).addClass(classname); 
     }) 
     .on("mouseout blur", function() {        
      $(this).removeClass(classname); 
     }); 

}); 
+0

Зачем это работать, если код OP не работает? (Код OP [работает] (http://jsfiddle.net/6mHL3/).) – nnnnnn

+0

Это также не работает – Tartar

+0

@nnnnnn Пример jsfiddle, который вы указали, не работает для события фокуса. – Tartar

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