Asp.net LinkButton不会在单击时调用()

Asp.net LinkButton不会在单击时调用(),asp.net,jquery,Asp.net,Jquery,为什么这样不行 <script src="Scripts/jquery-1.3.2.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { $('.myButton').click(); }); </script> </h

为什么这样不行

    <script src="Scripts/jquery-1.3.2.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $('.myButton').click();
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:LinkButton id="ttt" runat="server" PostBackUrl="~/Default.aspx" CssClass="myButton">Click</asp:LinkButton>
    </div>
    </form>

$(文档).ready(函数(){
$('.myButton')。单击();
});
点击

您需要指定一个事件处理程序,以便在引发click事件时触发

    $(document).ready(function() {
        $('.myButton', '#form1')
            .click(function() {  
                /* 
                   Your code to run when Click event is raised.
                   In this case, something like window.location = "http://..."                      
                   This can be an anonymous or named function
                */
                return false; // This is required as you have set a PostbackUrl
                              // on the LinkButton which will post the form
                              // to the specified URL
            }); 
    });
我已经用ASP.NET3.5测试了上述内容,它的工作原理与预期相符

Linkbutton上还有一个属性,指定在引发click事件时要运行的客户端脚本


我可以问一下您想要实现什么吗?

单击事件处理程序必须实际执行一个操作。试试这个:

$(function () {
    $('.myButton').click(function () { alert('Hello!'); });
});

您需要给linkButton一个CssClass=“myButton”,然后在顶部使用它

$(document).ready(function() {
        $('.myButton').click(function(){
             alert("hello thar");
        });
    });

是否要提交表单,或添加单击事件? 您的链接按钮转换为

<a id="ttt" class="myButton" href="javascript:WebForm_DoPos[...]">Click</a>

这很难。据我所知,您希望模拟在javascript代码中单击按钮的行为。问题是ASP.NET向onclick处理程序添加了一些奇特的javascript代码

在jQuery中手动触发事件时,只执行jQuery添加的事件代码,而不执行onclick属性或href属性中的javascript。因此,我们的想法是创建一个新的事件处理程序,它将执行属性中定义的原始javascript

我要提出的建议还没有经过测试,但我会试一试:

$(document).ready(function() {

// redefine the event
$(".myButton").click(function() {
   var href = $(this).attr("href");

   if (href.substr(0,10) == "javascript:") {
      new Function(href.substr(10)).call(this);
      // this will make sure that "this" is
      // correctly set when evaluating the javascript
      // code
   } else {
      window.location = href;
   }

   return false;
});

// this will fire the click:

$(".myButton").click();

});

只是澄清一下,只有FireFox会遇到这个问题。看见在FireFox中,anchor(a)标记没有click()函数来允许JavaScript代码直接模拟它们上的单击事件。它们允许您映射锚定标记的单击事件,而不是用click()函数模拟它

幸运的是,ASP.NET将JavaScript回发代码放在href属性中,您可以从中获取代码并对其运行eval。(或者只需调用window.location.href=document.GetElementById('LinkButton1').href;)

或者,您可以直接调用uu doPostBack('LinkButton1');请注意,“LinkButton1”应替换为LinkButton的ClientID/UniqueID,以处理命名容器,例如用户控件、母版页等


Jordan Rieger

如果需要触发linkbutton的OnClick服务器端事件,则需要使用_doPostback(eventTarget,eventArgument)

例:


函数onCyclientClick(){
//做一些客户端的事情
//点击链接按钮,表单将发布,点击按钮将在后端启动
//这是两个下划线
__doPostBack(“”,”);//第二个参数是必需的和多余的,只需使用blank即可
}
trigger('click')触发jQuery的click事件监听器,该监听器未连接到.NET。您只需启动javascript单击事件,该事件将转到(或在本例中运行)href属性中的内容:

 $('.myButton')[0].click();

($('.myButton')。长度?$('.myButton'):$('')[0]。单击();
如果您不确定按钮是否会出现在页面上


Joe

不,我没有ASP环境来测试它。但这肯定是一个错误。它确实有效,您需要在函数中执行一些操作。您是通过AJAX添加linkbutton还是在页面加载之后添加linkbutton?jQuery框架引用是否正确?您可以通过尝试$(document.ready(function(){alert(“Hello”);})进行测试;。click()无论如何都不会做任何事情,因为jQuery使用事件监听器而不是调整.onclick元素属性。实际上,Andrew,我测试了它只是为了确定,.click()确实启动了onclick事件。在IE7上似乎不起作用,在chrome上同样的代码也起作用。有没有人有同样的问题?不要使用eval(eval是邪恶的)-使用本机javascript click()方法-查看我的答案。编辑:Eval不好,因为它可能允许攻击者执行任意javascript。@Joe-
click()
确实有效,谢谢。不过,你可能不想真正的点击,这也可能做其他事情。我不相信“eval是邪恶的”,尤其是在这里。如果攻击者可以更改链接按钮上的
href
属性,则为时已晚。
<asp:LinkButton ID="btnMyButton" runat="Server" OnClick="Button_Click" />

<script type="text/javascript">

function onMyClientClick(){ 
  //do some client side stuff

  //'click' the link button, form will post, Button_Click will fire on back-end
  //that's two underscores
  __doPostBack('<%=btnMyButton.UniqueID%>', ''); //the second parameter is required and superfluous, just use blank
}

</script>
 $('.myButton')[0].click();
 ($('.myButton').length ? $('.myButton') : $('<a/>'))[0].click();