2010-12-07 16 views
5

Ich habe ein JavaScript-Snippet, das ein Widget auf meiner Seite anzeigt. Es gibt einige Links, die vom Skript wie folgt ausgegeben werden:Ändern des onclick-Ereignisses mit jQuery

<a href="#" onclick="somefunction()">Link</a> 

Diese Links verursachen, dass einige JS ausgelöst werden. Das ist großartig. Das Problem ist das href="#" und das Fehlen eines "return false;" am Ende des onclick Attributs.

Wenn ich auf einen dieser Links klicke, springt der Browser an den Anfang des Dokuments. Wenn das Widget nahe am unteren Rand des Dokuments positioniert ist, ist das nicht gut.

Leider habe ich keine Kontrolle über die Ausgabe des Skripts.

Mit jQuery kann ich diese Links unter Verwendung $("#wxheader ul li a") verweisen. Ich habe versucht, den folgenden Code, aber es funktioniert nicht:

$(document).ready(function(){ 
    $("#wxheader ul li a").each(function(){ 
     var onclick = $(this).attr("onclick") + "; return false;"; 
     $(this).attr("onclick", onclick); 
    }); 
}); 

ich eine jQuery-Funktion schreiben wollen, dass jedes Onclick-Attribut ändern "return false;" anhängen, und es hat zu laufen, nachdem das Skript Ausgabe um den Inhalt der Seite hat .

Irgendwelche Ideen?

Antwort

4

Versuchen Sie, diese Browser stoppen. Der Trick besteht darin, im Handler preventDefault aufzurufen, wodurch verhindert wird, dass sich die Standardelementaktion ausbreitet. Ich hoffe das hilft.

$("#wxheader ul li a").click(function(e){ 
    e.preventDefault(); 
    return false; 
}); 
+0

LOL ... Was ist mit den ganzen Stimmen? – James

+0

keine Ahnung von diesen Downvotes. Denken Sie daran, Ihre Konkurrenten wollen nicht, dass Sie Kredit bekommen. Dein war die schnellste Antwort, die getan hat, wozu ich es brauchte. – Jazzerus

+0

Danke, dass du mich in diesem Beitrag zurück zu neutralem Guthaben gebracht hast;) – James

2

Sie sollten in der Lage sein, es in jquery außer Kraft zu setzen, versuchen Sie dies:

$("#wxheader ul li a").each(function(){ 
    $(this).click(function(e) { 
     e.preventDefault(); 
    }); 
}); 

Dies stoppt den normalen Prozess des Click-Ereignis.

behoben, wird dies effektiv die Standard Interpretation des Click-Ereignis

+0

Das ist falsch, 'each' das jQuery-Set durchläuft, ist es nicht ein Click-Ereignis binden. –

+0

Dies würde nicht funktionieren, da es kein Ereignis gibt! – RobertPitt

+0

Sie haben Recht, ich habe seinen Code zu schnell kopiert, um ihn zu reparieren. –

2

Haben Sie versucht, href="javascript:" zu verwenden?

+0

was ist mit all den downvotes? : \ – bevacqua

2

Sie könnten auch verwenden:

<a href="javascript:void(0)" onclick="somefunction()">Link</a> 
+0

Ich würde immer noch eine jQuery-Funktion benötigen, um die href der Links von "#" nach "javscript: void (0)" zu ändern, da ich keine Kontrolle über die Ausgabe des Skripts habe. – Jazzerus

+0

Stimmen Sie jede nicht korrekte Antwort ab? Das erscheint ein bisschen absurd. Schau, ob ich dir das nächste Mal helfe. – Dutchie432

+0

Ich glaube nicht, dass er es getan hat, es musste jemand anderes sein, wenn man sich die Mathematik anschaut. – James

2

ich es tun würde, wie dieser

$('#wxheader ul li a').each(function(i, element) 
{ 
    // Capture the existing callback function 
    var originalCallback = element.onclick; 

    // Now, remove it from the elemnet 
    element.onclick = null; 

    // And replace it with our own, which calls the orignal 
    // with the proper context, and prevents the default 
    // event action 
    $(element).click(function(event) 
    { 
    event.preventDefault(); 
    originalCallback.call(window); 
    }); 
}); 
+0

ist das nicht, was mein Code tut? –

+0

Es scheint so, ja. Etwas andere Ansätze, aber sonst der gleiche Kern. Warum fragst du? –

2

Blick in das prevent Objekt in jQuery. die Rückkehr Hinzufügen falsch in dem jQuery Click-Handler

http://api.jquery.com/event.preventDefault/

dass es erlaubt zunächst nicht oder auch zu laufen. preventDefault funktioniert in Firefox möglicherweise nicht. Ich bin mir nicht ganz sicher.

Dies ist eine Testseite, die ich mit einigen Ajax-Funktionen auf einem Link für jemanden erstellt habe, der versucht, den normalen Klick zu überschreiben. Das ist die Funktionalität, über die ich spreche, wenn es das ist, wonach Sie suchen.

http://testing.kobbyappiah.com/Design_and_Evolve/ajaxTest.html