Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.NETWeb用户控件上的JQuery脚本执行多次_Jquery_Asp.net_User Controls - Fatal编程技术网

Asp.NETWeb用户控件上的JQuery脚本执行多次

Asp.NETWeb用户控件上的JQuery脚本执行多次,jquery,asp.net,user-controls,Jquery,Asp.net,User Controls,我在web用户控件上使用了一些javascript,并在一个页面上实例化了该控件的两个实例。控件只是显示一些帮助文本,应该切换为打开或关闭 document.ready函数按预期运行两次。但是,当我单击任一控件时,脚本将运行两次,因此控件将打开然后关闭 如何确保所单击的控件的脚本只运行一次 <div class="helpControlHolder"> <div class="expandableHeading">Show (Hide) </div>

我在web用户控件上使用了一些javascript,并在一个页面上实例化了该控件的两个实例。控件只是显示一些帮助文本,应该切换为打开或关闭

document.ready函数按预期运行两次。但是,当我单击任一控件时,脚本将运行两次,因此控件将打开然后关闭

如何确保所单击的控件的脚本只运行一次

<div class="helpControlHolder">
    <div class="expandableHeading">Show (Hide) </div>
    <div class="expandableContent commentsTable" >
        <ul id="ulComments" runat="server"></ul>
    </div>
</div>

<script type="text/javascript">
    function slideToggle(e, ui) {
            debugger;
            //find the right control to slideToggle
            var ct = e.currentTarget;
            var controlHolder = ct.parentNode;  //up the dom one element
            $(controlHolder).find(".expandableContent").slideToggle(500); //back down the dom to the element we want to animate

    }

    $(document).ready(function () {
        //find the right control to hide
        var pare = $('.helpControlHolder');
        pare.find(".expandableContent").hide();

        pare.find(".expandableHeading").click(function (e, ui) {
            e.preventDefault();
            slideToggle(e, ui);
        });
    });
</script>

显示(隐藏)
    功能滑块切换(e、ui){ 调试器; //找到要滑动切换的正确控件 var ct=e.currentTarget; var controlHolder=ct.parentNode;//向上填充dom元素 $(controlHolder).find(“.expandableContent”).slideToggle(500);//将dom返回到要设置动画的元素 } $(文档).ready(函数(){ //找到要隐藏的正确控件 var pare=$('.helpControlHolder'); pare.find(“.expandableContent”).hide(); 配对查找(“.expandableHeading”)。单击(函数(e,ui){ e、 预防默认值(); 滑动切换(e、ui); }); });
    尝试按如下方式更改javascript:
    功能滑块切换(e、ui){
    调试器;
    //找到要滑动切换的正确控件
    var ct=e.currentTarget;
    var controlHolder=ct.parentNode;//向上填充dom元素
    $(controlHolder).find(“.expandableContent”).slideToggle(500);//将dom返回到要设置动画的元素
    }
    $(文档).ready(函数(){
    //找到要隐藏的正确控件
    var pare=$('.helpControlHolder');
    pare.find(“.expandableContent”).hide();
    });
    $(函数(){
    $(“.expandableHeading”)。单击(函数(e,ui){
    e、 预防默认值();
    滑动切换(e、ui);
    });
    });
    希望能有帮助。
    
    问题在于(正如@UmairP所指出的),脚本被添加到页面两次。我将脚本移动到一个单独的文件(helpControl.js),然后将以下条目添加到我使用的母版页的“站点脚本”部分:

    <%--Site Scripts--%>
    <asp:ScriptReference Path="~/Scripts/C/helpControl.js" />
    
    
    
    这意味着它只添加一次,并按预期运行


    感谢您的回复

    我建议您将JavaScript代码放在一个单独的文件中,因为
    document ready
    被调用了两次,您的
    click()
    处理程序被绑定了两次,这导致了问题您正在使用类选择器,这意味着在页面上可以找到2个元素,我建议您让容器在服务器上运行,给出一个Id,然后在选择器中使用“#”@Satpal-将脚本放在单独的文件中本身并不能解决问题。@UmairP-是的,这就是问题所在,脚本位于每个控件上,因此被添加了两次。但是如何解决这个问题呢?为了解决这个问题,我将脚本移动到一个单独的文件中,然后在母版页的“站点脚本”部分添加了一个条目,如下所示:
    <%--Site Scripts--%>
    <asp:ScriptReference Path="~/Scripts/C/helpControl.js" />