<script type="text/javascript">        function cbCheck(chk)
        { 
            var combo = $find("<%= radRule.ClientID %>");            var items = combo.get_items();   // 这里报错了,combo 是 null 
        }
C#调用时才会这样,前台界面调用却是正常的。请问可以解决吗?

解决方案 »

  1.   

    我想问楼主 C# 调用API 哪学的,可以推荐下教程么
      

  2.   

    try
     var combo = $find("#<%= radRule.ClientID %>");
      

  3.   


    我加了一个#号,但是 combo仍然是 null.
    调试时的代码:var combo = $find("# ctl00_ContentPlaceHolder1_radRule");var items = combo.get_items();
      

  4.   

    #ctl00_ContentPlaceHolder1_radRule仍然是null....
      

  5.   

    $find是什么框架?jquery?到底要不要加#?
      

  6.   

    建议lz先找个jquery入门电子书看看,网上到处都是
      

  7.   

    var combo = $.find("#ctl00_ContentPlaceHolder1_radRule");
    报错:Microsoft JScript 运行时错误: '$' 为空或不是对象唉...网上找的段代码,我现在是有点像临时抱佛脚....请见谅....-_-||
      

  8.   

    我晕,你居然没用框架就用$.find你还是直接改成
    document.getElementById('<%= radRule.ClientID %>') 吧
      

  9.   

    var items = combo.get_items(); // combo有值了,但是又报错了:Microsoft JScript 运行时错误: 对象不支持此属性或方法
      

  10.   

    combo到底是个什么东西?你要搞清他的来龙去脉.正常的html元素是没有.get_items方法的,除非自定义的对象.
      

  11.   

    combo 就是一个第三方控件的ComboBox控件前台调用就没有报错,通过了
      

  12.   

    document.getElementById(' <%= radRule.ClientID %>') 
    这样写的话,连前台调用都报错了
      

  13.   

    这样吧,你把整个aspx贴出来,调用什么js也发出来.
      

  14.   

    我想楼主好像是在用asp.net ajax library,
    $find函数说明:
    如果父类没有指定,检索限制在顶级组件中,如果父类指定了组件对象,检索限制在指定的组件;如果父类是一个DOM元素,检索限定在次组件的子组件或者是特定的组件上。为什么是null,是因为在components中找不到<%= radRule.ClientID %>
      

  15.   


    <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); 
      

  16.   

    19楼贴出了代码,C#代码写错,现在纠正:
    // 前面有一段代码用于获得checkbox的clientID
    sbJSFun.Append("cbCheck(document.getElementById('" + item.ClientID + "'));");
    this.ClientScript.RegisterStartupScript(this.GetType(), "a", sbJSFun。ToString(), true); 一直在试,不停的试...唉...
      

  17.   


    前台的调用就是我贴的第一部份代码(html code) 里面的这一句:
    <asp:CheckBox runat="server" ID="chk1" onclick="cbCheck(this)"/>是一个单击事件。
      

  18.   

    cbCheck就是 function cbCheck(chk)
            { 
                var combo = $find("<%= radRule.ClientID %>");            var items = combo.get_items();   // 这里报错了,combo 是 null 
            }这个?
      

  19.   

    同一个函数,前台调就可以,后面调就不行,居然有这种事.
    你看看生成的HTML源代码.这两者有什么区别?
    function cbCheck(chk) 用原来的,什么都不要改.
      

  20.   

    惟一的区别我想是:前台是在点击 CheckBox是触发 cbCheck 方法后台是在Page_Load 时调用 cbCheck 方法
      

  21.   


    后台是在Page_Load 时调用 cbCheck 方法 
    只要把这个对象传过去就是可以的.check(this),这个this就是那个checkbox对象.会不会你这个cbCheck function写的位置太靠后了?写在调用的下方了?
      

  22.   

    应该不是,方法位置是在 html的最前面。。
      

  23.   

    传的是 checkBox ,但是这个方法中是 var combo = $find("<%= radRule.ClientID %>");上面这一句,我还需要获取一个ComboBox ,这里得到的是一个 null
      

  24.   

    可能是因为你C#调用JS的时候,你的JS在页头,这时候页面还没有加载到你所指的元素,所以会是null。
    还有你调用的是什么JS库,因为$find("")这种写法,Js里是没有的,他是JS库函数,比如Jquery,Prototype都有类似的函数。
      

  25.   

    $find("") 这种写法是 RadControls 特有的