JavaScript предотвращает запуск функции при закрытии окна

У меня есть текстовое поле ID="Text1", которое запускает функцию "validateField()", когда поле Text1 теряет фокус (оно также проверяет, была ли нажата клавиша ввода "onkeydown")

пример:

<input type=text ID="Text1" onkeydown="wasEnterKey(); " onblur="validateField()" >

Проблема в том, что когда пользователь закрывает окно, это событие срабатывает, и я хочу, чтобы этого не произошло.

Я пытался использовать window.onbeforeunload и window.onunload в функции validatField:

function validateField() 
{
 if (window.onbeforeunload) { 
    window.open('','_parent','');window.close(); return false;
                            } 
... (other actions follow)
}

Любая помощь будет принята с благодарностью.


person mladams    schedule 19.09.2012    source источник
comment
window.onbeforeunload — это обработчик событий. Вы назначаете ему функцию, которую хотите выполнить непосредственно перед выгрузкой страницы; вы не можете проверить, находитесь ли вы в процессе разгрузки, как вы, кажется, думаете.   -  person lanzz    schedule 19.09.2012
comment
Чтобы избежать срабатывания событий, попробуйте window.onbeforeunload = null   -  person Hitham S. AlQadheeb    schedule 19.09.2012
comment
Одним из способов может быть использование setTimeout для выполнения обратного вызова немного позже, так что, если он закроет окна, он не будет запущен. Не супер чистый. Интересно, есть ли лучший способ.   -  person 3on    schedule 19.09.2012
comment
Клавиша Enter упала духом, ах   -  person Alexander    schedule 19.09.2012
comment
Используйте задержку, прежде чем делать что-либо с размытием   -  person Champ    schedule 19.09.2012
comment
Спасибо @3on и @Champ! Я разработал решение, основанное на предложенном вами курсе действий. Мне нужно подождать еще шесть часов, чтобы опубликовать свое решение, но я сделаю это позже, чтобы другие могли использовать его, если это необходимо.   -  person mladams    schedule 20.09.2012


Ответы (1)


Спасибо: @3on и @Champ!

Вот решение, которое я разработал, подумал, что реальный код может быть кому-то полезен. Спасибо еще раз!

<SCRIPT LANGUAGE="JavaScript">
function delayBlur()
{   setTimeout( validatePwd, 100);  }

function closenow()
    {   window.open('','_parent','');window.close(); return false;  }

function validateField() 
{
    var field1 = document.myForm.Text1.value;
    if (Text1 == '')
    {... (other actions follow)}
}
</SCRIPT>
<input type=Text ID="Text1" onkeydown="wasEnterKey(); " onblur="delayBlur()">

Это позволяет окну закрываться, когда пользователь нажимает кнопку закрытия, как предлагали 3on и Champ. Это также предотвращает отправку формы с помощью клавиши ввода. Я обнаруживаю клавишу ввода и заменяю код клавиши клавишей табуляции. Я экспериментировал с установкой тайм-аута ниже 100, и у меня были спорадические проблемы, хотя 100 никогда не подводило!

person mladams    schedule 20.09.2012