点击IE / Firefox中的事件触发,但Chrome正在放弃事件分配

时间:2009-06-29 20:30:44

标签: javascript debugging javascript-events google-chrome

我正在调试我的网络应用程序并且遇到了问题。我在Google Chrome中遇到了一种行为,而我的javascript无能使我无法解决问题。

我有一个带<asp:Panel>控件的ASP页面。在面板中,我设置了一个简单的搜索文本框,并使用<asp:LinkButton>启动搜索。用户输入他们的搜索文本,并且应该能够输入(对于usability sake)并显示搜索结果。这适用于IE,但不适用于FireFox。有一个documented fix我已经应用到我的页面并成功让FireFox运行。金。

除此之外,此修复程序在Google Chrome中无效!有点可疑,我启动Firebug来调试代码......哦等等......这是Chrome唯一的问题。好的,我可以在没有Firebug的情况下处理调试javascript( sob ) - 我启动Chrome调试器并逐步完成代码。事实证明,之前提到的javascript修复程序正被Chrome删除。

修复脚本在页面加载时运行,并修改LinkButton

的点击处理程序
var defaultButton = document.getElementById('<%= lnkSearch.ClientID %>');
if (defaultButton && typeof(defaultButton.click) == 'undefined') {   
    defaultButton.click = function() {
        alert('function fired');
        var result = true;
        if (defaultButton.click) result = defaultButton.onclick();
        if (typeof(result) == 'undefined' || result) {
            eval(defaultButton.getAttribute('href'));
        }
    };
    alert(typeof(defaultButton.click) != 'undefined');
}

在chrome调试器中运行页面时,我会进入function WebForm_FireDefaultButton()并进入该行:

if (defaultButton && typeof(defaultButton.click) != "undefined") { ... }

由于某种原因,defaultButton.click已成为"undefined"。我很难过......我错过了什么?

另外,我没有使用jQuery,它不是一个可行的解决方案。

<小时/> 生成的HTML:

<div id="abc_pnlSearchPanel" language="javascript" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'abc_lnkSearch')"> 
    <div class="searchPanel"> 
        <span class="searchText"> 
            Type in stuff to search:
        </span> 
        <span style="float: left;">
            <input name="abc:txtSearch" type="text" id="abc_txtSearch" style="width:312px;" />
        </span> 
        <a onclick="this.blur();" id="abc_lnkSearch" class="ButtonLayout" href="javascript:__doPostBack('abc$lnkSearch','')"><span>Search</span></a> 
        <div style="clear: both"></div> 
    </div> 
</div> 

1 个答案:

答案 0 :(得分:3)

我无法确定为什么在Chrome和其他浏览器中都没有发生这种情况。但是注册要在PageLoad上执行的脚本解决了这个问题。

<body onLoad="DefaultButtonFix()">