请教:C# 调用JAVASCRIPT函数时,函数报错,前台界面调用却正常。 <script type="text/javascript"> function cbCheck(chk) { var combo = $find("<%= radRule.ClientID %>"); var items = combo.get_items(); // 这里报错了,combo 是 null }C#调用时才会这样,前台界面调用却是正常的。请问可以解决吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想问楼主 C# 调用API 哪学的,可以推荐下教程么 try var combo = $find("#<%= radRule.ClientID %>"); 我加了一个#号,但是 combo仍然是 null.调试时的代码:var combo = $find("# ctl00_ContentPlaceHolder1_radRule");var items = combo.get_items(); #ctl00_ContentPlaceHolder1_radRule仍然是null.... $find是什么框架?jquery?到底要不要加#? 建议lz先找个jquery入门电子书看看,网上到处都是 var combo = $.find("#ctl00_ContentPlaceHolder1_radRule");报错:Microsoft JScript 运行时错误: '$' 为空或不是对象唉...网上找的段代码,我现在是有点像临时抱佛脚....请见谅....-_-|| 我晕,你居然没用框架就用$.find你还是直接改成document.getElementById('<%= radRule.ClientID %>') 吧 var items = combo.get_items(); // combo有值了,但是又报错了:Microsoft JScript 运行时错误: 对象不支持此属性或方法 combo到底是个什么东西?你要搞清他的来龙去脉.正常的html元素是没有.get_items方法的,除非自定义的对象. combo 就是一个第三方控件的ComboBox控件前台调用就没有报错,通过了 document.getElementById(' <%= radRule.ClientID %>') 这样写的话,连前台调用都报错了 这样吧,你把整个aspx贴出来,调用什么js也发出来. 我想楼主好像是在用asp.net ajax library,$find函数说明:如果父类没有指定,检索限制在顶级组件中,如果父类指定了组件对象,检索限制在指定的组件;如果父类是一个DOM元素,检索限定在次组件的子组件或者是特定的组件上。为什么是null,是因为在components中找不到<%= radRule.ClientID %> <telerik:RadComboBox ID="radRule" Width="420px" Height="300px" AllowCustomText="True" EmptyMessage="请选择角色" runat="server" DataTextField="角色描述" DataValueField="角色码" > <ItemTemplate> <div onclick="StopPropagation(event)" class="combo-item-template"> <asp:CheckBox runat="server" ID="chk1" onclick="cbCheck(this)"/> <asp:Label runat="server" ID="Label1" AssociatedControlID="chk1"><%# Eval("角色描述") %> </asp:Label> </div> </ItemTemplate> </telerik:RadComboBox><script type="text/javascript"> function cbCheck(chk) { var combo = $find("<%= radRule.ClientID %>"); var combo1 = document.getElementById('<%= radRule.ClientID%>'); // 保存被选中item的text var text = ""; // 保存被选中item的value var values = ""; // 下拉列表框所有items var items = combo1.get_items(); // 遍历itmes for (var i = 0; i < items.get_count(); i++) { var item = items.getItem(i); // 获取当前itme的选中状态 var chk1 = $get(combo.get_id() + "_i" + i + "_chk1"); if (chk1.checked) { text += item.get_text() + "," ; values += item.get_value() + ","; } } </script>C# 调用:// 前面有一段代码用于获得checkbox的clientIDsbJSFun.Append("cbCheck(document.getElementById('" + item.ClientID + "'));");this.ClientScript.RegisterStartupScript(this.GetType(), "a", sJavaScpt, true); 19楼贴出了代码,C#代码写错,现在纠正:// 前面有一段代码用于获得checkbox的clientIDsbJSFun.Append("cbCheck(document.getElementById('" + item.ClientID + "'));");this.ClientScript.RegisterStartupScript(this.GetType(), "a", sbJSFun。ToString(), true); 一直在试,不停的试...唉... 前台的调用就是我贴的第一部份代码(html code) 里面的这一句:<asp:CheckBox runat="server" ID="chk1" onclick="cbCheck(this)"/>是一个单击事件。 cbCheck就是 function cbCheck(chk) { var combo = $find("<%= radRule.ClientID %>"); var items = combo.get_items(); // 这里报错了,combo 是 null }这个? 同一个函数,前台调就可以,后面调就不行,居然有这种事.你看看生成的HTML源代码.这两者有什么区别?function cbCheck(chk) 用原来的,什么都不要改. 惟一的区别我想是:前台是在点击 CheckBox是触发 cbCheck 方法后台是在Page_Load 时调用 cbCheck 方法 后台是在Page_Load 时调用 cbCheck 方法 只要把这个对象传过去就是可以的.check(this),这个this就是那个checkbox对象.会不会你这个cbCheck function写的位置太靠后了?写在调用的下方了? 应该不是,方法位置是在 html的最前面。。 传的是 checkBox ,但是这个方法中是 var combo = $find("<%= radRule.ClientID %>");上面这一句,我还需要获取一个ComboBox ,这里得到的是一个 null 可能是因为你C#调用JS的时候,你的JS在页头,这时候页面还没有加载到你所指的元素,所以会是null。还有你调用的是什么JS库,因为$find("")这种写法,Js里是没有的,他是JS库函数,比如Jquery,Prototype都有类似的函数。 $find("") 这种写法是 RadControls 特有的 在C#程序中调用C++的dll,DllImport 有没有人用UDP写过实时性比较高的程序的 不知道list类型的情况下,创建List 一个关于C#中SQL语句的问题 怎么让datagridview默认显示若干行啊 c# 删除oracle数据库中的数据出现界面卡死 这个事件激发怎么写! WebForm 问题! NET技术交流群:14428871 C#选择图片资源时本地资源和项目资源文件的区别 求助:session问题!!! 如何让Winform弹出窗口,不处理就永远有焦点而不能做其他事?
var combo = $find("#<%= radRule.ClientID %>");
我加了一个#号,但是 combo仍然是 null.
调试时的代码:var combo = $find("# ctl00_ContentPlaceHolder1_radRule");var items = combo.get_items();
报错:Microsoft JScript 运行时错误: '$' 为空或不是对象唉...网上找的段代码,我现在是有点像临时抱佛脚....请见谅....-_-||
document.getElementById('<%= radRule.ClientID %>') 吧
这样写的话,连前台调用都报错了
$find函数说明:
如果父类没有指定,检索限制在顶级组件中,如果父类指定了组件对象,检索限制在指定的组件;如果父类是一个DOM元素,检索限定在次组件的子组件或者是特定的组件上。为什么是null,是因为在components中找不到<%= radRule.ClientID %>
<telerik:RadComboBox ID="radRule" Width="420px" Height="300px"
AllowCustomText="True" EmptyMessage="请选择角色" runat="server" DataTextField="角色描述" DataValueField="角色码" >
<ItemTemplate>
<div onclick="StopPropagation(event)" class="combo-item-template">
<asp:CheckBox runat="server" ID="chk1" onclick="cbCheck(this)"/>
<asp:Label runat="server" ID="Label1" AssociatedControlID="chk1"><%# Eval("角色描述") %>
</asp:Label>
</div>
</ItemTemplate>
</telerik:RadComboBox><script type="text/javascript">
function cbCheck(chk)
{
var combo = $find("<%= radRule.ClientID %>");
var combo1 = document.getElementById('<%= radRule.ClientID%>');
// 保存被选中item的text
var text = "";
// 保存被选中item的value
var values = "";
// 下拉列表框所有items
var items = combo1.get_items();
// 遍历itmes
for (var i = 0; i < items.get_count(); i++)
{
var item = items.getItem(i);
// 获取当前itme的选中状态
var chk1 = $get(combo.get_id() + "_i" + i + "_chk1");
if (chk1.checked)
{
text += item.get_text() + "," ;
values += item.get_value() + ",";
}
}
</script>
C# 调用:// 前面有一段代码用于获得checkbox的clientID
sbJSFun.Append("cbCheck(document.getElementById('" + item.ClientID + "'));");
this.ClientScript.RegisterStartupScript(this.GetType(), "a", sJavaScpt, true);
// 前面有一段代码用于获得checkbox的clientID
sbJSFun.Append("cbCheck(document.getElementById('" + item.ClientID + "'));");
this.ClientScript.RegisterStartupScript(this.GetType(), "a", sbJSFun。ToString(), true); 一直在试,不停的试...唉...
前台的调用就是我贴的第一部份代码(html code) 里面的这一句:
<asp:CheckBox runat="server" ID="chk1" onclick="cbCheck(this)"/>是一个单击事件。
{
var combo = $find("<%= radRule.ClientID %>"); var items = combo.get_items(); // 这里报错了,combo 是 null
}这个?
你看看生成的HTML源代码.这两者有什么区别?
function cbCheck(chk) 用原来的,什么都不要改.
后台是在Page_Load 时调用 cbCheck 方法
只要把这个对象传过去就是可以的.check(this),这个this就是那个checkbox对象.会不会你这个cbCheck function写的位置太靠后了?写在调用的下方了?
还有你调用的是什么JS库,因为$find("")这种写法,Js里是没有的,他是JS库函数,比如Jquery,Prototype都有类似的函数。