Microsoft JScript运行时错误:预期的对象

时间:2010-01-29 13:28:51

标签: jquery code-behind contentplaceholder

我老老实实地尝试了谷歌在这个错误的几个不同的途径,但我撞到了一堵砖墙。

我的代码背后有一些jquery:

tbxProdAC.Attributes.Add("onclick", "$('radProdAC.ClientID').attr('checked', true); $('ddlBuyer.ClientID').val('--Choose Buyer--'); $('ddlSub.ClientID').val('--Choose Sub Category--'); $('ddlProd.ClientID').val('--Choose Product--');");

但是,每当我点击文本框,打开调试时,我就会在以下行收到上述错误:

 <input name="ctl00$ContentPlaceHolder1$tbxProdAC" type="text" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$tbxProdAC\',\'\')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="ctl00_ContentPlaceHolder1_tbxProdAC" class="completionList2" onclick="$('radProdAC.ClientID').attr('checked', true); $('ddlBuyer.ClientID').val('--Choose Buyer--'); $('ddlSub.ClientID').val('--Choose Sub Category--'); $('ddlProd.ClientID').val('--Choose Product--');" style="z-index: 1; left: 200px; top: 475px; position: absolute; height: 20px; width: 345px;" />   

现在ctl00 $ ContentPlaceHolder1 $ tbxProdAC实际上并不存在。这是一个位于内容占位符内容页面上的控件。

如何确保jquery与正确的ID进行协调,或者如何确保内容占位符不会修改原始控件ID?

任何帮助都很受欢迎,因为我疯狂地尝试不同的事情!

2 个答案:

答案 0 :(得分:0)

在onchange事件处理程序中,您不需要javascript位,您可以直接调用该函数,您只需要执行此操作即可通过href调用该函数。您也无法以超时方式传递参数。

可能值得在函数中调用超时而不是调用事件。

无论哪种方式,你都可以在超时中异常调用函数,例如;

setTimeout(function(){youfunction here with parameters}, 0);

此外,我会将其他事件中发生的所有事情单击等移动到他们自己的函数中。如果将所有这些内容移动到函数中,或许将其移动到外部js文件中,您将能够跟踪更多内容,因为它会更清晰。如果你还没有使用firebug进行调试。如果你需要从页面获取生成的变量,那么只需要在页面中的变量,并从js中调用它们。

有可能在jquery中过于具体并遍历dom来查找内容而不是明确地引用它不仅使代码更容易使其更通用,因此更具可重用性。

答案 1 :(得分:0)

tbxProdAC.Attributes.Add(    
    "onclick", 
    "$('" + radProdAC.ClientID + "').attr('checked', true); $('" + ddlBuyer.ClientID + "').val('--Choose Buyer--'); $('" + ddlSub.ClientID + "').val('--Choose Sub Category--'); $('" + ddlProd.ClientID + "').val('--Choose Product--');"
);

您需要获取客户端ID,这必须在引号之外完成。

"$('radProdAC.ClientID').attr('checked', true);需要在键入的任何地方更改为"$('" + radProdAC.ClientID + "').attr('checked', true);