2013-04-19 4 views
-2

В настоящее время я работаю над некоторым инструментом администратора со столом. Когда я нажму на поле, он сделает его редактируемым. Но у меня есть несколько полей, где у меня есть более одного поля выбора или текстового поля. Проблема заключается в том, что обработчик вызывается, когда одно поле выбора или текстовое поле размываются..blur() из двух полей выбора

Я попытался проверить, имеет ли какой-либо объект нужный объект, но кажется, что событие размытия активируется перед тем, как новый элемент имеет фокус.

Чтобы привести пример:

Мой HTML код выглядит следующим образом:

<form> 
<select id="edit"> 
<!-- Options... --> 
</select> 
<select id="edit2"> 
<!-- Options... --> 
</select> 
</form> 

И это некоторые из моих JS:

$(document).on("blur", "select.edit", finishEdit); 
$(document).on("blur", "select.edit2", finishEdit); 

// Some later point in the code 

function finishEdit() 
{ 
    if(!($("select.edit:focus").length || $("select.edit2:focus").length)) 
    { 
    // This should NOT be called if I just focus edit2! But it does!! 
    } 
} 

Так я начинаю имея редактировать выбранный , Я могу легко отредактировать его. Но если теперь я попытаюсь выбрать edit2, будет вызываться событие blur из edit. ОК. это не должно быть большой сделкой, так как я проверяю, если другой снижается. Но в этот момент edit2 еще не сфокусирован, поэтому мой чек не работает и вызывается код, который удаляет выпадающие списки и отправляет обновления!

Итак, как я мог выполнить эту работу? В основном, как я могу предотвратить событие размытия при стрельбе, если я сосредоточу внимание на другом действительном элементе?

(я надеюсь, что это более ясно теперь ...)

ответ

1

Ok. Я решил это!

$(document).on("blur", "select.edit, select.edit2", function() 
{ 
    $(document).one("click", finishEdit); 
}); 

Это вызывает функцию finishEdit после того, как фокус установлен.

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