LinkButton не вызывает при нажатии () - PullRequest
14 голосов
/ 03 июня 2009

Почему это не работает?

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

37 голосов
/ 03 июня 2009

Хотите отправить форму или добавить событие Click? Ваша кнопка ссылки переводится как

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

, поэтому у него нет JavaScript при нажатии. Следовательно, .click(); ничего не делает.
Я не проверял это, но, возможно, это сработает:

eval($('.myButton').attr('href'));
11 голосов
/ 08 марта 2013
Триггер

('click') запускает прослушиватель событий нажатия jQuery, к которому не подключен .NET. Вы можете просто запустить событие щелчка JavaScript, которое перейдет (или запустится в этом случае) к тому, что находится в атрибуте href:

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

или

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

Если вы не уверены, что кнопка будет присутствовать на странице.

Джо

3 голосов
/ 19 апреля 2011

Если вам нужно, чтобы событие 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>
1 голос
/ 03 июня 2009

вам нужно назначить обработчик событий для запуска при возникновении события 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.

Могу я спросить, чего вы пытаетесь достичь?

0 голосов
/ 14 января 2011

Просто чтобы уточнить, только FireFox страдает от этой проблемы. См. http://www.devtoolshed.com/content/fix-firefox-click-event-issue.. В FireFox теги anchor (a) не имеют функции click (), чтобы позволить коду JavaScript напрямую имитировать события нажатия на них. Они do позволяют отображать событие click тега привязки, но не моделировать его с помощью функции click ().

К счастью, ASP.NET помещает код обратной передачи JavaScript в атрибут href, где его можно получить и запустить на нем eval. (Или просто вызовите window.location.href = document.GetElementById ('LinkButton1'). Href;).

В качестве альтернативы вы можете просто вызвать __doPostBack ('LinkButton1'); обратите внимание, что LinkButton1 должен быть заменен на ClientID / UniqueID LinkButton для обработки контейнеров именования, например, UserControls, MasterPages и т. Д.

Джордан Ригер

0 голосов
/ 03 июня 2009

Это сложный вопрос. Насколько я понимаю, вы хотите имитировать поведение нажатия кнопки в коде JavaScript. Проблема в том, что ASP.NET добавляет какой-то необычный код JavaScript в обработчик onclick.

При ручном запуске события в jQuery будет выполняться только код события, добавленный jQuery, а не JavaScript в атрибуте onclick или атрибуте href. Поэтому идея состоит в том, чтобы создать новый обработчик событий, который будет выполнять исходный 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();

});
0 голосов
/ 03 июня 2009

вам нужно дать linkButton CssClass = "myButton", а затем использовать это в верхней части

$(document).ready(function() {
        $('.myButton').click(function(){
             alert("hello thar");
        });
    });
0 голосов
/ 03 июня 2009

Обработчик события click должен фактически выполнить действие. Попробуйте это:

$(function () {
    $('.myButton').click(function () { alert('Hello!'); });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...