2013-04-16 1 views
0

В моей форме у меня есть поля, на которые я применил событие onblur. Проблема в том, что если я нажимаю на сохранение непосредственно после ввода некоторого поля, сохранение не вызывается. Мне нужно щелкнуть дважды. Для получения дополнительных пояснений см. Шаги ниже, а также фрагмент кода.нужно нажать 2 раза, чтобы потерять фокус

1) Введите некоторое значение в поле ввода
2) Потерять фокус либо tabing вне или нажав где-нибудь еще на экране
3) он отлично работает и функция triggerOnBlur получает вызывается
4) Теперь введите некоторое значение ввода box снова
5) сразу нажмите на кнопку сохранения, не щелкая нигде
6) функция triggerOnBlur вызывается, но для того, чтобы нажать кнопку «Сохранить», мне нужно нажать «Сохранить».

Я хочу сделать это в один клик ..

<!DOCTYPE html> 
<html> 
<head> 
<script> 
function triggerOnBlur() 
{ 
alert("onblur event triggered"); 
} 

function triggerSaveButton() 
{ 
alert("save button"); 
} 
</script> 
</head> 
<body> 

<form> 
<input type = "text" onblur = "triggerOnBlur()" /> 
<input type = "submit" value = "Save" onclick = "triggerSaveButton()" /> 
</form> 
</body> 
</html> 
+1

Я предполагаю, что предупреждение в событии onBlur перемещает фокус от кнопки, поэтому событие onClick не запускается. Что произойдет, если ваш метод triggerOnBlur() сделает что-то, что не улавливает фокус? –

+0

эй. thxx gareth для reply.yes u r right. на самом деле в моей реальной реализации, вместо окна предупреждения, мне нужно иметь ajax-вызов, но он делает то же самое, что и поле предупреждения, может быть потому, что вызов ajax также удаляет фокус. так что любые предложения, что можно было сделать ??? –

ответ

0

Вы всегда могли бы сделать что-то вроде:

function triggerSaveButton() 
{ 
    var inputs = document.getElementsByTagName("input"), input = null; 
    for(var i = 0, len = inputs.length; i < len; i++) { 
     input = inputs[i]; 
     if(input.type == "text" && input == document.activeElement) { 
      input.blur(); 
     } 
    } 
    // onblur triggered, now continue with function 
    alert("save button"); 
} 
+0

нет .. это не сработало :(может быть, потому что в конце он теряет фокус –

+0

Кажется, что я работаю на своем конце, когда вы нажимаете save с помощью 'input', который имеет': focus', onblur' этого 'input'. Разве это не то, о чем вы просили? Просто запустите остальную часть своего кода после цикла' for'. – faino

+0

Не используйте 'alert' для проверки кода, он выйдет из строя функции 'function' @TarunMadaan попробуйте' console.log() 'или какую-то форму' innerHTML'. – faino

1

Потому что ваш alert() разорвать click событие, click event нужно отпустить кнопку мыши на кнопке, если вы должны использовать alert(), вы можете использовать событие onmousedown, посмотрите на этот пример

http://jsfiddle.net/3w8VM/

+0

Спасибо за ответ за ответ, но в вашем примере функция сохранения сначала запускается, затем размывает событие, которое нежелательно, но наоборот –