我目前正在开发一个需要使用大量AJAX AutoCompleteExtenders的项目,而且它们一直运行良好 - 但现在我正在整理代码并实现母版页,我遇到了问题。我有这个JS:
$find('txtName')._onMethodComplete = function(result, context) {
$find('txtName')._update(context, result, false);
webservice_callback(result,context);
};
当我加载页面时,会发生与该代码段相关的错误:
Microsoft JScript运行时错误:'null'为null或不是对象
重申一下,只有当我出于某些奇怪的原因拥有母版页时才会发生这种情况。有什么想法吗?
答案 0 :(得分:1)
您需要使用<%=txtName.ClientID%>
,因为在使用母版页时,您的ID将被损坏,以避免母版页和aspx / usercontrols等之间的名称冲突。
但请注意,为了能够使用<%=
,您必须在ASP.NET标记代码中包含JS。这可以通过IIS #include
完成,而不是使用script
的src。
示例:
<!-- #Include virtual=".\JS\YourJSFileWithASPNETMarkup.js" -->
答案 1 :(得分:0)
在您的网页上尝试查看来源,并确保&lt; input&gt;仍然命名为txtName。有时使用母版页,名称会更改。
答案 2 :(得分:0)
你可以试试这个:
('&lt;%= txtName.ClientID&gt;')._ onMethodComplete = function(result,context){
答案 3 :(得分:0)
如果您正在使用.NET 4,那么您可以将ClientIDMode="Static"
添加到页面指令中,这将告诉ASP.NET保持它不受元素ID的影响。
答案 4 :(得分:0)
当您使用母版页时,控件的ID会发生变化,因此您无法在Javascript中使用相同的ID,而是可以修改您的选择器,如下所示:$('input [id * =“txtName”]')现在它找到所有具有包含txtName的id的控件。你可以使用这种不同的选择器。 here is a useful link