IE中的JQuery错误,适用于FF。也许是现场的问题

时间:2010-05-07 15:46:58

标签: javascript jquery asp.net-mvc internet-explorer

我有一个ASP.net MVC2应用程序。我正在使用JQuery来更改所有表行,以便我可以单击任何行中的任意位置以触发单击行中链接上的单击事件。

使用MVC内置的partialview ajax创建表。

这是我的JQuery脚本。

<script type="text/javascript">

        $(document).ready(function () {
            $('table tr').live('click',function (event) {
                $('#asplink', this).trigger('click');
            })
            .live('mouseenter',function (event) {
                this.bgColor = 'lightblue';                    
            })
            .live('mouseleave', function (event) {
                this.bgColor = 'white';
            });

        });

</script>

这是创建表格的部分视图代码的第一部分。

<% foreach (var item in Model.JobHeaderData)
   { %>

    <tr>
        <td>
            <a id="asplink" href="http://localhost/sagstyring/EditJob.asp?JobDataID=<%: item.JobDataId %>&JobNumId=<%: item.JobNumID%>&JobNum=<%: item.JobNumID%>&DepId=1&User_Id=<%:ViewData["UserId"]%>" onclick="window.open(this.href,'Rediger sag <%: item.JobNumID %> ', 'status=0, toolbar=0, location=0, menubar=0, directories=0, resizeable=0, scrollbars=0, width=900, height=700'); return false;">Rediger</a>                 
        </td>

在Firefox中,这非常有效。在IE中,当我点击一行时,JQuery崩溃了。

如果我在IE中调试页面。我明白了。

Out of stack space

在jquery-1.4.1.js第1822行

 // Trigger the event, it is assumed that "handle" is a function
    var handle = jQuery.data( elem, "handle" );
    if ( handle ) {
        handle.apply( elem, data );
    }

我不是javascript的老鹰,所以我几乎陷入困境。

编辑:IE在我的window.open函数中遇到了空格问题。解决了这个问题之后,我现在可以看到click事件正常工作,但它进入循环。我只是一直点击链接,直到我得到堆栈空间错误。

对此有何想法?

4 个答案:

答案 0 :(得分:1)

试试这个:

$('table tr').live('click',function (event) {
    $('#asplink', this).trigger('click');
    return false;
})

基于this question,看起来event.stopPropogation();无法使用直播,您需要使用return false;。我不确定为什么这会在IE中出现问题,但不是Firefox。

答案 1 :(得分:1)

找到解决方案。

这很有效。

$('table tr').live('click', function (event) {                    
                window.open(jQuery(this).find(".asplink").attr('href'), 'Edit', 'status=0, toolbar=0, location=0, menubar=0, width=900, height=700');                               
            })

答案 2 :(得分:0)

尝试:

$('table tr').live('click',function (event) {
  $(this).find('#asplink').trigger('click');

})
划伤那个。

再次查看你的代码,我真的认为所有行都具有相同的id。尝试给他们所有的类aslpink而不是id。并将jquery更改为:

$('table tr').live('click',function (event) {
  $(this).find('.asplink').trigger('click');

})
嗯,好吧: 尝试给行所有唯一的ID。像id='#asplink<%=JobId%>'和使用

之类的东西
$(this).find('.asplink').click();

页面上还有其他表吗?

答案 3 :(得分:0)

如果你的锚标签上仍然有asplink类,请尝试将此代码添加到文档中:

$('a.asplink').live('click', function(event) {
    event.stopPropogation();
}

这应该可以防止锚标记上的click事件冒泡到td标记并再次触发锚标记上的click事件。