我正在尝试使用jQuery创建一些自定义可点击菜单,最终产品在IE8中除了在其他地方工作正常...当我点击链接时,没有任何反应。但是,如果我打开调试器,并刷新onclick属性,那么它在IE中工作正常。所以看起来像IE,没有“看到”由jQuery创建的onclick?这有可能吗?
以下是一些示例代码:
var props;
props['views'] = [ 'item1', 'item2', 'item3' ];
从其他链接保存onclick并将其传输到菜单
props['onclick'][i] = $(this).closest('a').attr('onclick');
然后在
for (var i in props.views) {
var a = $('<a></a>');
// override the class from props.linkclass
var cssclass = 'myMenu';
// override the onclick from props.onclick[i]
var onclick = props.onclick[i] + ';highlightDynamicMenu(this);';
a.attr( {
'class' : cssclass,
'href' : 'javascript:void(0);',
'onclick' : onclick }
);
a.append(props.views[i]); // name of the link
menu.append(a);
}
这是从我的代码生成的链接,再次,在除IE8之外的其他任何地方都可以正常工作......呃。
<a onclick="javascript:showMyDiv('div1208', 'div1208', event);highlightDynamicMenu(this);" class="myMenu" href="javascript:void(0);">item1</a>
现在,正如我之前提到的,如果我打开调试器并刷新链接,说删除“javascript:”然后按回车键,那么IE8会“看到”链接......
这究竟是什么问题? &GT;。&LT;
更新:我尝试使用:a[0].setAttribute('onclick',onclick);
IE8仍然无法接听...
答案 0 :(得分:4)
您不应该以这种方式操纵onclick
attribte。内联处理程序通常是一个坏主意,因此像这样黑客攻击甚至更糟。
相反,您应该使用事件处理程序。在这种情况下:
a.click(highlightDynamicMenu);
你可以保留attr... 'onclick':props.onclick[i]
,因为它看起来像是在传递一个字符串,但实际上你应该尝试将它作为一个匿名函数并传递它。
答案 1 :(得分:0)
在Defualt的代码中没有问题大多数时候IE的行为与其他人不同。 在msdn上报道了类似的问题。
试试这样
根据您的示例props.onclick[i]
javascritp:
个问候符onclick="javascript:show('div1208', 'div1208', event);highlightDynamicMenu(this);"
var onclick = props.onclick[i] + ';highlightDynamicMenu(this);';
a.attr( {
'class' : cssclass,
'href' : onclick, // On Click variable value which will be something like javascript:show('div1208', 'div1208', event);highlightDynamicMenu(this);
}
);
a.append(props.views[i]);