2009-09-07 2 views
0

У нас есть веб-система, которая использует комбинацию событий OnBlur и OnMouseDown. К сожалению, по какой-то странной причине обработчик события OnMouseDown запускается до вызова обработчика события OnBlur.Настройка приоритетов в событиях HTML

Это не то, что мы хотим. Вместо этого мы хотим всегда вызывать обработчик события OnBlur до вызова обработчика события onMouseDown. Есть ли способ сделать это, возможно, придав onBlur более высокий приоритет?

Раньше вместо использования обработчика событий onMouseDown у нас было событие onclick. Однако это вызвало ряд проблем, особенно из-за однопоточного характера JavaScript.

+0

Это зависит от браузера. – voyager

+0

Определенно это так. Всегда сложно писать код в нескольких браузерах. Однако мы можем с уверенностью предположить, что мы нацелены на IE. Также странно, что когда я заменяю onmousedown событием onclick, тогда происходит то, что вызывается только обработчик события onblur, и это нормально, однако фактический обработчик onclick не вызывается, когда я нахожусь в поле с onblur. С помощью onmousedown мы почти там, но событие onblur запускается после onmousedown, чего мы не хотим. – user164701

+0

Я думаю, что mousedown тогда размытие довольно стандартное в этом случае. Помните, что обработчик события onmousedown может возвращать false, и в этом случае изменение фокуса не происходит. onclick, как правило, работает; возможно, разместите код, который там не работает? – bobince

ответ

0

Catch event #2, пожар event #1. Затем пропустите event #2.

.. Catch-и-релиз шаблона :)

+0

Большое спасибо. Можете ли вы любезно предоставить простой пример или указатель для получения дополнительной информации об этом? – user164701

+0

@roosteronacid, что, если произойдет только одно из событий? Вы все еще называете метод тела? – PanCrit

0

Вы должны будете подделать его с помощью переменной состояния. Это немного грязно, но это работает: мясо doImportantStuff будет запускаться только один раз.

var importantStuffDone = false; 
function doImportantStuff(){ 
    if(!importantStuffDone){ 
      // Do something important 
      importantStuffDone = true; 
    } 
} 

function doOnBlur(){ 
    // This function gets bound to the blur event 
    doImportantStuff(); 
    // Do other blur stuff 
} 
function doOnMouseDown(){ 
    // This function gets bound to the mousedown event 
    doImportantStuff(); 
    // Do other mousedown stuff 
} 
+0

Большое спасибо. Я получил ваше решение, но мы хотим, чтобы событие onBlur всегда вызывалось до вызова события onmousedown. Таким образом, суть вопроса связана скорее с изменением приоритета или приоритета обработки событий Javascript. – user164701

+0

Вы не можете; и даже если бы вы могли, реализация систем событий в устаревших браузерах настолько различна, что в конечном итоге она сломается во что-то еще. Лучшее, что вы можете сделать, это подделка, как это. – 2009-09-07 14:40:53

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