-2

这篇文章之后,我在 jQuery 或 Firefox 中发现了一个奇怪的错误。你能解释一下哪个是对的。

jQuery(document).ready(function(){

    //Works on Windows in: Firefox(17.0.1), IE
    //Doesn't work on OS X 10.8 in: Firefox(17.0.1), Safari
    //And also doesn't work on Windows in Chrome
    jQuery('input').focus(function(){
        jQuery(this).val('');
    });

    //Same on events: change, click, select, on
    jQuery('.checkbox').click(function(){ 
        alert(jQuery(this).val());
    });
});​

这是示例http://jsfiddle.net/nonamez/Gq8VK/

4

2 回答 2

1

那么Firefox正在做它应该做的事情,在焦点上它将值设置为空白运行点击回调,提醒您刚刚设置的银行价值。在基于 Webkit 的浏览器中,您可以在元素上包含“tabindex”属性并使用它来检查焦点。当您使用鼠标触发焦点事件时,Webkit 不起作用,它似乎适用于输入和文本区域。

于 2012-12-20T17:41:09.937 回答
1

当涉及到表单元素时,并非所有浏览器都有相同的行为。您所看到的是 webkit 浏览器不会因为单击事件而导致复选框被聚焦。这是否是一个错误将由 w3 规范决定。

我在 w3.org 上找不到关于这个主题的明确答案。我发现的大部分内容似乎表明这是由用户代理决定的。

但是,您可以通过将其包含在脚本中来使所有浏览器的行为相同:http: //jsfiddle.net/Gq8VK/5/

// Any input that does not receive focus from a mouseclick 
// will now do so, in all browsers. This shouldn't affect browsers that
// focus input elements on click. 
$(document).on('mouseup', 'input', function(){
    if (!$(this).is(":focus")) $(this).focus();
});

该脚本使用事件委托,因此它将适用于所有输入,包括附加事件时 DOM 中不存在的输入。

于 2012-12-20T18:19:39.147 回答