我老老实实地尝试了谷歌在这个错误的几个不同的途径,但我撞到了一堵砖墙。
我的代码背后有一些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?
任何帮助都很受欢迎,因为我疯狂地尝试不同的事情!
答案 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);
。