Событие jQuery click работает только после второго клика
Я щелкнул событие привязки к классу с именем ".reportfile" следующим образом.
$('body').on('click','.reportfile',function(e){
e.preventDefault();
e.stopPropagation();
var id=$(this).attr('id');
if(!$(this).hasClass('brc')) {
// Perform some action here.
}
});
Сейчас я динамически создаю элемент LI с помощью класса.reportfile. Как это,
var inLi=$('<li>');
inLi.addClass('reportfile');
$(containerdiv).append(inLi);
Теперь, когда я пытаюсь нажать на динамически сгенерированные элементы LI, он работает только при втором щелчке.
https://jsfiddle.net/mt7km8bz/
В верхней части UL есть поле ввода для фильтрации списка. Здесь я создаю новую LI динамически. Элемент LI в отфильтрованном списке нужно дважды щелкнуть, чтобы заставить его работать.
4 ответа
Проблема заключалась в фокусировке на поле ввода, в поле ввода первого щелчка все еще есть фокус, поэтому событие щелчка в списке не срабатывает.
Таким образом, при первом щелчке он теряет фокус на поле ввода, а при втором щелчке запускается событие.
Изменения в следующих работали для меня.
$('body').on('keyup','.searchable',function(){
// Some code
});
Я предполагаю, что событие нажатия jQuery работает только после второго щелчка, потому что фокус ввода. Так что я сделал дурацкий способ, который вызывает событие LostFocus, используя таймер.
setTimeout(function(){
$('.searchable').blur();
},1500);
Это код... https://jsfiddle.net/2hkn2jpk/
Попробуй это.....
$(document).on('click','.reportfile',function(e){
var id=$('.reportfile').attr('id');
if(!$('.reportfile').hasClass('brc')) {
// Perform some action here.
}
});
Измените это на нажатие клавиши, его работает. Я проверял в скрипке. Jsfiddle
$( ".searchable" ).keypress(function(){
$('.ul2').html('');
var value=$(this).val().trim().toLowerCase();
if(value=="") {
$('.ul1').show();
$('.ul2').hide();
} else {
$('.ul1').hide();
$('.ul2').show();
}
$('.ul1').find('.reportfile').each(function(index){
var title=$(this).attr('title').toLowerCase();
if(title.indexOf(value)>=0) {
var LIin=$("<li>");
LIin.addClass('reportfile');
LIin.text(title);
$('.ul2').append(LIin);
}
});
});