jQuery创建了<a> link not triggering in IE</a>

时间:2013-04-23 15:19:54

标签: javascript jquery html internet-explorer onclick

我正在尝试使用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仍然无法接听...

2 个答案:

答案 0 :(得分:4)

您不应该以这种方式操纵onclick attribte。内联处理程序通常是一个坏主意,因此像这样黑客攻击甚至更糟。

相反,您应该使用事件处理程序。在这种情况下:

a.click(highlightDynamicMenu);

你可以保留attr... 'onclick':props.onclick[i],因为它看起来像是在传递一个字符串,但实际上你应该尝试将它作为一个匿名函数并传递它。

答案 1 :(得分:0)

在Defualt的代码中没有问题大多数时候IE的行为与其他人不同。 在msdn上报道了类似的问题。

http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/ec196223-248b-4483-ada8-93838f5c5249/

试试这样 根据您的示例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]);