Asp.NETWeb用户控件上的JQuery脚本执行多次
我在web用户控件上使用了一些javascript,并在一个页面上实例化了该控件的两个实例。控件只是显示一些帮助文本,应该切换为打开或关闭 document.ready函数按预期运行两次。但是,当我单击任一控件时,脚本将运行两次,因此控件将打开然后关闭 如何确保所单击的控件的脚本只运行一次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>
<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" />