2009-12-28 83 views
1

问题现在resopled :)感谢大家的帮助和关注!IE6 textBox.focus();导致“意外调用方法或财产访问”

我发现了JS错误“以方法或属性访问意外呼叫”在IE6间歇上线“oAutoCompleteTextBox.focus();”。希望以前有人看到过这个问题,可以提供一些关于如何解决问题的见解。以下是使用情况。

$(document).ready(function() { 
    ... 
    oAutoCompleteTextBox = GetElement('<%=this.AutoCompleteTextBox.ClientID%>'); 
    ... 
    SetupDefaultValues(); 
} 

function SetupDefaultValues() { 
    ... 
    if(canFocus(oAutoCompleteTextBox)) { 
     oAutoCompleteTextBox.focus(); 
    } 
} 

我的第一篇文章在stackoverflow - YAY!

回答

1

好的,所以问题是jQuery $(document).ready()事件不会在updatepanel异步回发中触发。解决方案是将ready()中的函数定义重构为明确的函数定义(即函数pageReady(){...})并将新的pageReady()事件处理程序添加到ASP.net Sys.WebForms.PageRequestManager endRequest仅在异步回发时触发的事件。

因此,代码现在看起来像这样:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(pageReady); 
$(document).ready(pageReady); 

function pageReady() { 
    ... 
    oAutoCompleteTextBox = GetElement('<%=this.AutoCompleteTextBox.ClientID%>'); 
    ... 
    SetupDefaultValues(); 
} 

function SetupDefaultValues() { 
    ... 
    if(canFocus(oAutoCompleteTextBox)) { 
     oAutoCompleteTextBox.focus(); 
    } 
} 

感谢大家的帮助和关注 - 一段时间以后才弄清楚,我很高兴它解决了:)

+0

但是你在这里做的所有延迟onload几个周期,哪些settimeout可以做...这是一个时间问题不是吗? – Ayyash 2009-12-29 02:00:18

+0

事实证明,时间不是问题......问题在于pageReady()方法没有被调用,因为在ASP内的异步回发期间,jQuery $(document).ready()事件没有被触发。净UpdatePanel。因此oAutoCompleteTextBox未正确初始化。更改是使用Sys.WebForms.PageRequestManager endRequest事件在异步回发上初始化var oAutoCompleteTextBox。 – HOCA 2009-12-29 02:12:52

+0

但等待,如果ready()没有被调用它是如何调用:SetupDefaultValues()并抛出一个错误?顺便说一句,对话框没有自己的窗口对象,所以如果document.ready依赖于窗口。当你打开一个对话框时,你是否将窗口对象与它一起传递?我离题了,你的解决方案工作?请继续:) – Ayyash 2009-12-30 06:26:51

0

oAutoCompleteTextBox是全局声明的吗?您将它设置在document.ready函数中,但试图在另一个函数中使用它。

+0

是,oAutoCompleteTextBox声明全球。 – HOCA 2009-12-28 20:09:25

0

你确定它是一个文本框吗? “canFocus”功能是做什么的?如果它是“INPUT”警告类型,如果它是“文本”,那么你有问题:)知道IE6,它可能是一个时间问题,但是,如果你调用setupdefaultvalues在一个settimeout 10秒,我可能会工作

+0

我确实验证了oAutoCompleteTextBox实际上是一个TextBox(w/tagName = INPUT)。你可能是对的时间问题,我也怀疑它可能与时间有关 - 特别是因为错误是间歇性的:( – HOCA 2009-12-28 21:06:35

+0

哦,等待,是只读还是禁用? – Ayyash 2009-12-28 21:38:43

+0

它不是只读或禁用 - 但它不' t有一个parentElement ...我想知道这是否与坐在模态对话扩展器中的事实有关 – HOCA 2009-12-28 22:54:50