2009-06-03 10 views
14

Dlaczego to nie działa?LinkButton nie wywołuje się po kliknięciu()

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

Odpowiedz

35

Chcesz wysłać formularz lub dodać zdarzenie click? Twój przycisk Link przekłada się

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

, więc nie ma na kliknięcie javascript. Dlatego .click(); nic nie robi.
nie mam go przetestować, ale może to będzie działać:

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

.click() i tak by nic nie zrobił, ponieważ jQuery używa detektorów zdarzeń, zamiast dostosowywać właściwość elementu .onclick. –

+2

Właściwie, Andrew, przetestowałem to tylko, aby się upewnić, i .click() rozpoczyna zdarzenie onClick. – Kobi

+0

Och, przepraszam, moja zła! –

1

trzeba przypisać obsługi zdarzeń do ognia, gdy zdarzenie jest wywoływane kliknięciem

$(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 
      }); 
    }); 

Ja testowałem powyższe z ASP.NET 3.5 i działa zgodnie z oczekiwaniami.

Istnieje również atrybut OnClientClick w łączu, który określa skrypt po stronie klienta do uruchomienia po podniesieniu zdarzenia kliknięcia.

Czy mogę zapytać, co próbujesz osiągnąć?

+0

Dzięki ale nie spróbować that..that nie działa – Hitz

+0

to działa, trzeba wykonać pewne działania w funkcji. czy dodajesz link poprzez AJAX lub po załadowaniu strony? –

+0

to poprawnie określona struktura jQuery? Możesz przetestować, próbując $ (document) .ready (function() {alert ("Hello");}); –

0

Program obsługi zdarzeń kliknięcia musi faktycznie wykonać działanie. Spróbuj tego:

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

Dzięki, ale czy próbowałeś .. to nie działa – Hitz

+0

Nie, nie mam środowiska ASP, aby je przetestować. Z pewnością jest to jednak błąd. –

0

trzeba dać linkButton się CssClass = "myButton", a następnie użyć tego w górnym

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

To trudne pytanie. Jak rozumiem, chcesz naśladować zachowanie kliknięcia przycisku w kodzie javascript. Problem polega na tym, że ASP.NET dodaje do kodu obsługi onclick pewien fantazyjny kod javascript.

Podczas ręcznego uruchamiania zdarzenia w jQuery zostanie wykonany tylko kod zdarzenia dodany przez jQuery, a nie javascript w atrybucie onclick lub atrybucie href. Pomysł polega więc na utworzeniu nowego programu obsługi zdarzeń, który będzie wykonywał oryginalny javascript zdefiniowany w atrybutach.

Co mam zamiar zaproponować nie zostały przetestowane, ale dam mu szansę:

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

Właśnie w celu wyjaśnienia, tylko FireFox cierpi na ten problem. Zobacz http://www.devtoolshed.com/content/fix-firefox-click-event-issue. W FireFox znaczniki anchor (a) nie mają funkcji click(), aby umożliwić kodowi JavaScript bezpośrednią symulację zdarzeń kliknięcia na nich. One do umożliwiają mapowanie znacznika zakotwiczenia , aby nie symulować go za pomocą funkcji click().

Na szczęście ASP.NET umieszcza kod zwrotny kodu JavaScript w atrybucie href, gdzie można go pobrać i uruchomić eval na nim. (Lub po prostu wywołaj window.location.href = document.GetElementById ('LinkButton1'). Href;).

Alternatywnie możesz po prostu zadzwonić __doPostBack ("LinkButton1"); zauważ, że "LinkButton1" należy zastąpić identyfikatorem ClientID/UniqueID elementu LinkButton służącego do obsługi kontenerów nazw, np. UserControls, MasterPages itp.

Jordan Rieger

3

Jeśli potrzebujesz zdarzenie OnClick po stronie serwera w linkButton do ognia, trzeba użyć __doPostBack (eventtarget, eventArgument).

ex:

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

wyzwalania ('kliknięcie') zwalnia słuchacza zdarzenia kliknięcia jQuery, które .NET nie jest podłączona do. Wystarczy odpalić javascript zdarzenie click, które trafi do (lub uruchomić w tym przypadku), co jest w atrybucie href:

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

lub

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

jeśli nie jesteś pewien, czy przycisk ma zamiar być obecnym na stronie.

Joe

Powiązane problemy