LinkBut​​ton不会在click()上调用

时间:2009-06-03 06:46:20

标签: 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>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:LinkButton id="ttt" runat="server" PostBackUrl="~/Default.aspx" CssClass="myButton">Click</asp:LinkButton>
    </div>
    </form>

8 个答案:

答案 0 :(得分:37)

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

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

,所以它没有点击式javascript。因此,.click();什么都不做 我没有测试过,但也许这会起作用:

eval($('.myButton').attr('href'));

答案 1 :(得分:11)

trigger('click')触发jQuery的click事件监听器,.NET没有连接到它。您可以触发javascript click事件,该事件将转到(或在此情况下运行)href属性中的内容:

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

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

如果您不确定该按钮是否会出现在页面上。

答案 2 :(得分:3)

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

例如:

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

答案 3 :(得分:1)

您需要指定一个事件处理程序,以便在引发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.NET 3.5对上述内容进行了测试,并且按预期工作。

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

我可以问你想要达到的目标吗?

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

你需要给linkBut​​ton一个CssClass =“myButton”然后在顶部使用它

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

答案 6 :(得分:0)

这是一个艰难的。据我了解,你想模仿点击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();

});

答案 7 :(得分:0)

只是澄清一下,只有FireFox会遇到这个问题。见http://www.devtoolshed.com/content/fix-firefox-click-event-issue。在FireFox中,anchor(a)标签没有click()函数,允许JavaScript代码直接模拟它们上的点击事件。他们执行允许您映射锚标记的点击事件,而不是使用click()函数进行模拟。

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

或者,您可以调用__doPostBack('LinkBut​​ton1');请注意,“LinkBut​​ton1”应该由LinkBut​​ton的ClientID / UniqueID替换,以处理命名容器,例如: UserControls,MasterPages等

Jordan Rieger