防止组合框和镶边的默认行为

时间:2011-08-17 16:03:10

标签: jquery google-chrome focus blur

我想这样做,当点击组合框时,列表应该打开,但是应该弹出一个警告。

我有这段代码:

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

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

这在FF中工作正常,但在chrome中不起作用,

知道为什么吗?

提前谢谢你......

3 个答案:

答案 0 :(得分:2)

为防止事件冒泡,您应使用preventDefault()来实现跨浏览器兼容性。

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

答案 1 :(得分:1)

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

适用于Chrome,IE 9(非8)和Opera(至少版本11.61,这是我安装的版本)。它在Firefox中不起作用,不知道为什么。然而,元素上的模糊和窗口上的焦点对我来说不起作用,无论是在mousedown还是在点击上。

由得到downvoted这里两次的答案(http://stackoverflow.com/questions/1905464/html-select-dropdown)的启发,我想出了这个小变化(原来使得整个窗口闪烁,这是一个tad hideous):

$('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,这意味着轻微的闪烁,因为下拉列表实际上打开后立即关闭,但是preventDefault可以使其在其他所有现代浏览器中都运行良好。选择是邪恶的,我不认为有一个很好的跨浏览器方式来控制下拉列表是否显示。返回false应该根据互联网上的谣言做一些事情,所以我把它留在那里,可能它在旧浏览器中工作。

P.S。:在您的问题中,您的意思是“[...]列表打开,而是[...]”,对吧?

答案 2 :(得分:0)

Demo

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

添加return false works