7

我正在尝试aria-autocomplete使用 jQuery 在元素上设置属性。但是,当IE10IE5 Quirks 模式IE7 标准模式下运行时,它会产生Member not found错误。

<input type="textbox" id="test" />​
$('#test').attr({"aria-autocomplete": "list"});​

有关演示,请参阅此jsFiddle

我尝试了此处定义的各种其他 ARIA 属性:

HTML 5:标记语言(ARIA 版)

有些会产生相同的错误,有些则不会。

我无法重现 IE9 中的错误。

这是IE10中的错误吗?jQuery?还是有其他我不理解的原因?

4

2 回答 2

11

波兹,

这是 IE10 浏览器在兼容模式下的一个已知错误。请对此错误票投赞成票,以增加修复它的可能性。https://connect.microsoft.com/IE/feedback/details/774078票是由 jQuery 团队提交的。

您是否在真正的 IE7 中尝试过您的代码示例?我用浏览器堆栈(WinXP/IE7)尝试了你的 jsFiddle,并且示例工作没有错误。

如果您使用兼容模式来模拟测试 IE7,那么好消息是使用原生 IE7 可以正常工作。坏消息是 IE10 兼容模式存在一个错误。

于 2013-01-04T23:15:05.650 回答
0

这就是我的解决方案。在您使用的 Jquery 版本中,在我的 cas ( jquery-1.7.2.js) 中,第 2764 行有一段如下所示:

// Use this for any attribute in IE6/7
// This fixes almost every IE6/7 issue
nodeHook = jQuery.valHooks.button = {
    get: function( elem, name ) {
        var ret;
        ret = elem.getAttributeNode( name );
        return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
            ret.nodeValue :
            undefined;
    },
    set: function( elem, value, name ) {
        // Set the existing or create a new attribute node
        var ret = elem.getAttributeNode( name );
        if ( !ret ) {
            ret = document.createAttribute( name );
            elem.setAttributeNode( ret );
        }
        return ( ret.nodeValue = value + "" );
    }
};

根据https://bugs.jquery.com/ticket/12577,这是IE7模式下IE10的兼容性问题。解决方案是更改 set 函数中的返回变量:

 return ( ret.nodeValue = value + "" );
//for:
elem.setAttribute(name, value + ""); 
return (ret.value);
于 2016-01-26T18:58:11.957 回答