2012-10-26 9 views
6

Ich mag Parameter zu übergeben, wenn ich in <a href> klicken, ich habe ersten und funktioniert gut:Wie Parameter mit einer href und Onclick Funktion zu übergeben

<a href="#" rel="like{{num}}"> I like </a>| 

    $("a[rel^='like']").click(function(){ 
      $.ajax({ 
       ... 
      }); 

aber ich weiß nicht, wie Parameter zu übergeben diese Funktion, so mache ich das:

<a href="#" rel="like{{num}}" 
      onclick="cap(para1, para2)"> I like </a> 

schließlich in meinem Javascript ich habe diese einfache Funktion:

function cap(para1, para2){ 
     alert('here'); 
    } 

aber ich erhalte diesen Fehler:

ReferenceError: cap is not defined 

Irgendwelche Idee?

+0

Würde diese 'cap'-Funktion innerhalb eines' $ (document) .ready() 'Callbacks liegen? – Blender

Antwort

6

Eine Lösung ist data attributes zu verwenden:

<a href="#" rel="like{{num}}" data-para1="Oh" data-para2="{{somepara}}"> I like </a> 

<script> 
function cap(para1, para2){ 
    alert('here'); 
} 
$("a[rel^='like']").click(function(){ 
    var para1 = this.dataset['para1']; 
    var para2 = this.dataset['para2']; 
    cap(para1, para2); 
}); 
</script> 

Sie es auch so schreiben können, wenn Sie einen strukturierteren Ansatz bevorzugen:

<a href="#" rel="like{{num}}" data-params="{'para1':'Oh','para2':'{{somepara}}'}"> I like </a> 

$("a[rel^='like']").click(function(){ 
    var params = this.dataset['params']; 
    var para1 = params.para1; 
    var para2 = params.para2; 

Beachten Sie, dass, wenn das Dokument ist kein HTML5 Dokument müssen Sie die kompatibler data function of jQuery verwenden (aber es gibt kaum einen Grund, HTML5 Doctype heute nicht zu verwenden):

var para1 = this.data('para1'); 
+1

Die Antwort ist ein wenig irreführend, da scheint, dass "Daten" Attribut zu jQuery verwandt ist, während es für HTML5-Dokumente eingeführt wurde. Daher bietet diese Lösung ein gültiges Markup, wenn er HTML5 verwendet. Natürlich funktioniert es auch für Nicht-HTML5-Markups. – JeanValjean

+0

@JeanValjean +1 Sie haben Recht, Sie können die Dataset-Attribute verwenden. Ich werde bearbeiten, um die Erwähnung von jQuery zu entfernen. Danke für das Zeigen. –

3

Vielleicht möchten Sie dies versuchen.

<a class="ilike" href="javascript:;" data-p1="abc" data-p2="123"> I like </a> 

<script> 
    function cap(para1, para2){ 
     alert('here'); 
    } 

    $(function(){ 
     $('.ilike').click(function(){ 
      var $this = $(this); 
      var p1 = $this.data('p1'); 
      var p2 = $this.data('p2'); 
      cap(p1, p2); 
     }); 
    }); 

</script> 
0

Wenn Sie es über Onclick tun wollen, ist es entweder, dass 1) Sie Ihre Funktion in der falschen Umfang oder 2) eine andere JS Fehler aufgetreten ist, bevor der Funktionsdeklaration erklärt haben, und es verursacht nicht ausgeführt werden. wenn es zu sehen

den Umfang Problem zu beheben, können Sie versuchen, window.cap = function(para1, para2) { ...

tun irgendwelche Fehler, versuchen Sie so etwas wie Firebug oder einen beliebigen Browser-Entwickler-Tools und auf Fehler unter Konsole überprüfen.

Verwandte Themen