запретить поведение по умолчанию для combobox и chrome - PullRequest
1 голос
/ 17 августа 2011

Я пытаюсь сделать так, чтобы при нажатии на выпадающий список, список открывался, а вместо этого появлялось предупреждение.

У меня есть этот код:

$('select').focus(function() {
    this.blur();
    window.focus();
});   

$('select').click(function(){
    alert('Clicked but did not open');
});

Это отлично работает в FF, но не работает в Chrome,

Есть идеи почему?

Спасибозаранее ...

Ответы [ 3 ]

2 голосов
/ 17 августа 2011

Чтобы предотвратить всплывание события, вы должны использовать preventDefault() для кросс-браузерной совместимости.

$('select').mousedown(function(e) {
    this.blur();
    window.focus();
    e.preventDefault();
});
1 голос
/ 23 марта 2012

делает

$('select').mousedown(function(e) {
    e.preventDefault();
});

работает в Chrome, IE 9 (не 8) и Opera (по крайней мере, версия 11.61, которую я установил). Это не работает в Firefox, не знаю почему. Однако размытие на элементе и фокусировка на окне не работают для меня никогда, ни в mousedown, ни при щелчке.

Вдохновленный ответом, за который здесь дважды проголосовали (/886162/zapretit-vybor-raskryvayschegosya-spiska-no-razreshit-ego-sobytiya), Я придумал этот небольшой вариант (оригинал заставляет мерцать все окно, оно немного отвратительно):

$('select').mousedown(function(event) { 
   var $select = this;
   window.setTimeout(function () {          
      $select.blur();
      $select.focus();
      //do whatever like alert("This message");
   },0);        
   event.preventDefault();
   return false;
});

Теперь, для FF (у меня версия 10) и IE <9, это означает небольшое мерцание, так как выпадающий список открывается и закрывается сразу после этого, но для предотвращения его использования в любом другом современном браузере есть функция protectDefault. Выбор - зло, я не думаю, что есть хороший кросс-браузерный способ контролировать, показывает ли выпадающий список или нет. Возвращение false должно что-то делать в соответствии со слухами в Интернете, поэтому я оставил это там, может быть, оно работает в старых браузерах. </p>

П.С .: В своем вопросе вы имели в виду "[...] список должен не открываться, а вместо этого [...]", верно?

0 голосов
/ 17 августа 2011

Демо

$('select').click(function() {
    this.blur();
    window.focus();
    return false;
});   

Добавление возврата ложных произведений

...