Я сталкиваюсь с этой причудой между тем, как Chrome и Firefox выполняют эту функцию, но я не могу понять, почему Firefox не будет выполняться. У меня есть флажки, для которых функция прослушивает любые изменения в любом флажке, а затем выполняет некоторый текст для отображения. Но для одного флажка я хотел бы прервать обычный текст и выполнить какое-то регулярное выражение перед его завершением. Итак, у меня есть прослушиватель событий mousedown
, который пытается получить этот эффект. Мое обоснование заключается в том, что mousedown
будет выполнять код до события изменения checkbox
(не уверен, что это верно для всех браузеров).
Странность возникает, когда во время этой функции mousedown
переменная с именем amt
требует значения. Если переменная amt
введена через диалоговое окно подсказки, Firefox не выполнит остальную часть функции. Если вместо этого та же самая переменная amt
вводится через элемент <input>
, функция работает нормально. В Chrome одинаковые результаты достигаются любым методом.
Может кто-нибудь объяснить разницу и есть ли лучший способ остановить функцию, чтобы другая функция могла работать до завершения?
Скрипка здесь: http://jsfiddle.net/ufgvoghw/7/
JS
dxOuts = {
dxOut100: 'ITEM #0:',
dxOut101: 'ITEM #1:',
dxOut102: 'ITEM #2: '
};
var final = '';
var sel = null;
$('#_box0').mousedown(function () {
$('#dxOut100').prop('disabled', true); // <-- disable checkbox to ensure click event doesn't take place when label mousedown occurs
// var amt = prompt('Enter amount'); //<-- this doesn't work in firefox, but works in chrome
var amt = $('#amt').val(); //<-- this works in FF and chrome
dxOuts.dxOut100 = dxOuts.dxOut100.replace(/#[\d*(?=\d)]/, '#'+amt);
$('#dxOut100').prop('disabled', false).trigger('click');
});
function printf(){
final += dxOuts[sel] + '\n\n';
$('#output').val(final);
}
$('input:checkbox').on('change', function () {
if($(this).is(':checked')){
sel = $(this).attr('id');
printf();
}
});
HTML
<label id="_box0">
<input type='checkbox' id='dxOut100'>ITEM #</label>
<input id="amt" size=5>
<br>
<label id="_box1">
<input type='checkbox' id='dxOut101'>ITEM #1</label>
<br>
<label id="_box2">
<input type='checkbox' id='dxOut102'>ITEM #2</label>
<br>
<br>
<textarea id='output' cols=25 rows=5></textarea>