2013-12-11 7 views
0

В следующем example есть простое поле ввода и кнопка.jquery change иногда событие предотвращает событие click

<body> 
    <input type="text" id="in"> 
    <input type="button" value="click" id="button"> 
    </body> 

В поле ввода есть функция события изменения и функция click-event-function.

$(document).ready(function() { 
     $('#in').change(function() { 
     console.log('change event'); 
     //window.alert('change event'); 
     }); 
     $('#button').click(function() { 
     console.log('click event'); 
     }); 
    }); 

При изменении значения поля ввода и сразу нажать кнопку (не выходя из курсора), мое ожидание, что оба события увольняют. К сожалению, это поведение зависит от кода, выполняемого внутри функции изменения, например. при раскомментировании строки window.alert событие click не запускается - или функция click-event-function не выполняется. Зачем? Как я могу избежать кода, который предотвращает выполнение функции click-event-function?

Update: вместо window.alert, то jquery.hide имеет same effect

$(document).ready(function() { 
     $('#in').change(function() { 
     console.log('change event'); 
     $('#hide').hide(); 
     }); 
     $('#button').click(function() { 
     console.log('click event'); 
     }); 
    }); 
+0

alert() является модальным, это объясняет это –

+1

Поскольку вы на самом деле не нажимали кнопку. вы вместо этого оставили вход, тогда браузер сразу же застыл, ожидая, пока вы нажмете кнопку ok в сообщении. Пока он * заморожен * или * заблокирован *, вы не можете взаимодействовать со страницей. Чтобы исправить это, не используйте предупреждение. –

+0

все еще блуждающий, что вы ищете? – anand4tech

ответ

0

Если вы хотите, чтобы стрелять как из двух событий, вы можете сделать так:

$(document).ready(function() { 
     $('#in').change(function() { 
     console.log('change event'); 
     window.alert('change event'); 
     $('#button').click(); 
     }); 
     $('#button').click(function() { 
     console.log('click event'); 
     }); 
    }); 
+0

Это только решит проблему, если я знаю, какая кнопка нажата или если - как в примере с урезанным - есть только одна кнопка. К сожалению, это не случай. – Meise2000

+0

Извините, что вы имеете в виду «какая кнопка» ?. Это id #button, поэтому он уникален, и вы должны это знать. – HICURIN

+0

Да, в приведенном выше примере я могу его решить. Но в моем случае есть много кнопок и много полей ввода. Я просто хотел сэкономить вам подробности, и я убрал пример. – Meise2000

0

Попробуйте

$(document).mousedown(function(e){ 
    console.log('click event'); 
}); 

Событие mousedown будет происходить до изменения текстового поля и нажатия событий, так что вам нужно установить тайм-аут и проверить измененное значение текстового поля, если это необходимо.

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