2016-09-04 5 views
3

Я пытаюсь обновить DOM на основе значения, введенного в текстовое поле.Событие blur не запускается при первой попытке

HTML:

<input id="event-name" type="text"/> 

Jquery:

$('#event-name').on('blur',function(){ 
    $.post("scripts/add-team-support.php",{eventName : eventName},function(minAndMaxString){ 
    //my code here 
    }); 
}); 

это работает на первом размытости в Chrome. Когда я пробовал это в опере, мозилле и краю, это не сработало с первой попытки.

Это сработало, когда я добавил это перед jquery.

$("#event-name").focus(); 
$("#event-name").blur(); 
$("#event-name").focus(); 

Я сделал это, чтобы первый вызов $ .post возникал при открытии страницы.

Почему эта проблема происходит? Как решить это правильно? Пожалуйста, помогите!

+0

try keyup event – Ish

+0

keyup, keydown, keypress произвел ту же проблему. Я тоже их попробовал. – Altair827

+0

Событие «размытие» - немного странный выбор. Почему бы не прослушать событие «change», которое имеет почти такое же значение? – hindmost

ответ

0

Это часто случается с элементами во всех браузерах, что последующие события не работают при привязке события к ним через ID или класса. Следующее решение должно помочь вам:

$(document).on('blur','#event-name', function(){ 
    $.post("scripts/add-team-support.php",{eventName : eventName},function(minAndMaxString){ 
    //my code here 
    }); 
}); 

В качестве альтернативы, вы можете использовать keyup событие. Вы можете сделать следующее:

$(document).on('keyup','#event-name', function(){ 
    var eventName = $(this).val(); 
    $.post("scripts/add-team-support.php",{eventName : eventName},function(minAndMaxString){ 
    //my code here 
    }); 
}); 

Кроме того, с помощью - в идентификаторах не хороший подход. Скорее, либо придерживайтесь camelCase, либо underscore_format соглашения об именах.

+1

Событие размытия не сработало, но событие keyup работало так, как оно делает первый вызов, когда я печатаю первую букву. Я буду использовать это. Я изменил размытие на клавиатуру в моем коде. – Altair827

+0

Отлично! Кроме того, убедитесь, что вы обрабатываете события для таких ключей, как «backspace», и в этом случае у вас уже есть данные! Кроме того, если ответ вам помог, отметьте его как принятый ответ! – Sayed

+0

Я позабочусь об этом. – Altair827

1

Вы можете попробовать этот код:

var lazyTriggerEvent = function(id,event,callback){ 
    var searchTrigger=null; 
    $("#"+id).bind(event,function(){ 
     var text = $.trim($(this).val()); 
     clearTimeout(searchTrigger); 
     searchTrigger = setTimeout(function(){ 
      callback(text); 
     },500); 
     }) 
    }; 
//use keyup event 
lazyTriggerEvent("event-name","keyup",function(){}) 
Смежные вопросы