【问题标题】:Jquery is not working with usercontrolJquery 不使用用户控件
【发布时间】:2011-04-23 09:49:17
【问题描述】:

我在 usercontrol 中有一个按钮。用户控件被加载(添加)到占位符 通过一些事件。 问题是此按钮的简单 jquery 单击事件不起作用。 我错过了什么?选择器应该是什么样的?

$('#mybutton').click(function () { alert("..."); }); 

或者我必须遍历它?

注意:我设法执行了用户控件代码隐藏。

非常感谢。

【问题讨论】:

  • 当您通常在占位符下放置一些控件时,它的 ID 会更改为 PlaceHolderID_YourConrolID,您确定按钮的 ID 仍然是 mybutton
  • 试试这个:$('#<%= mybutton.ClientID %>').click(function () { alert("..."); });
  • 没用。有什么建议吗?

标签: jquery asp.net webusercontrol


【解决方案1】:

试试这个:

$('#mybutton').live("click", function () { alert("..."); }); 

由于控件#mybutton 在$(document).ready() 触发后添加到页面,因此jQuery 无法将处理程序添加到该对象。 live 意味着,无论何时以及如何创建元素,它的“点击”事件都将绑定到作为第二个参数提供的函数。

顺便说一句。 #mybutton 假定元素是标准的 html 对象,或者是渲染后保留 ID 和 NAME 作为 mybutton 的 ASP 控件。如果不是,请将$("#mybutton") 替换为$("#<%= mybutton.ClientID %>") 或尝试将ASP 控件的ClientIDMode 设置为Static,或者通过类名访问控件。

编辑:

追加事件处理程序的建议方法是

$('#mybutton').on("click", function () { alert("..."); }); 

【讨论】:

  • 嘿,谢谢!我尝试了一切,直到我将 bind() 更改为 live()。
  • 作为一个经验法则:如果控件在 HTML 标记中静态声明并且从不在回发时重绘,则使用 Bind,对动态添加或在回发时重新填充的控件使用 Live
【解决方案2】:

我遇到过类似的问题并找到了这个解决方案:使用这样的控件(在标题标签内部)将指向 jquery 文件的链接和一个空的脚本标签放在页面上:

<script type="text/javascript" src="../scripts/jquery-1.10.1.min.js" />
<script type="text/javascript" language="javascript"></script>

然后是用户控件本身(无标题标签):

<script type="text/javascript" language="javascript">
$(document).ready(function() {
    //your function here.
});
</script>

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    您需要在客户端检查 id 是否与 mybutton 相同? ASP.NET 将所有用户控件的客户端 ID 替换为属性 runat="server"

    可以查看源码看到修改后的id。

    【讨论】:

      【解决方案4】:

      在 aspx 页面中,当您将按钮放置在占位符内时。客户 ID 自动更改。所以你必须使用带有选择器的 Jquery End。 http://api.jquery.com/attribute-ends-with-selector/

      您使用 $ 符号来查找动态控件 ID。

      $("input[id$=mybutton]").click(function () { alert("..."); }); 
      

      【讨论】:

      • 它没有用。 DOM 树是 button > usercontrol > placeholder > page。
      • 页面右击,进入查看页面源码。然后向我提供那个 Button 的 ClientID。
      • 我找不到。该按钮位于用户控件内。
      • 你是对的人。您的解决方案完美运行。但我不得不把你的函数放在 "jquery updatepanel function" 中。因为我的用户控件在 里面。非常感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      相关资源
      最近更新 更多