2017-10-23 4 views
0

Das ist, was ich jetzt habe, und es funktioniert nicht:Kann ich ein Attribut basierend auf dem Wert eines anderen Attributs mithilfe von jQuery festlegen?

<script> 
jQuery(function($){ 
    $(document).ready(function(){ 
    $("a").attr('onclick', 'return goog_report_conversion(' + this.attr('href') + ')'); 
    }); 
}); 
</script> 

Bin ich falsch die ‚this‘ Schlüsselwort?

+3

Tun Sie das nicht. Sie sollten tatsächliche Ereignishandler verwenden. – SLaks

+2

Nein, die Codezeile wurde noch nicht interpretiert. Also bezieht sich 'this' nicht auf das angeklickte' a'. (Wenn es das war, was Sie auch haben wollten) – JustinJmnz

Antwort

4

Wenn Sie das Element onclick nicht inline zuweisen, sehe ich keinen Grund, warum Sie nicht einfach einen Standard-Event-Handler verwenden würden. Sie können mehr über die Vorteile here lesen.

Ich würde dies vorschlagen:

$("a").click(function() { 
    var href = $(this).attr("href"); 
    return goog_report_conversion(href); 
}); 

Auch Ihre ersten beiden Codezeilen die gleiche Aufgabe durchführen, so dass Sie beide nicht benötigen. (More info here)

jQuery(function($){ ... }); 

// OR 

$(document).ready(function() { ... }); 

Wenn Sie sich fragen, warum Ihr nicht funktioniert:

attr() keine eigene this Argumente haben.

(nach oben Tracing, der Kontext, in dem Sie es verwenden würde tatsächlich beziehen sich auf die document, wie der Umfang von $(document).ready(...) definiert ist)

Wenn Sie waren es, so zu tun, Sie müssten wahrscheinlich Ihre goog_report_conversion() Funktion ändern, um einen Parameter des angeklickten Elements anstelle der href zu akzeptieren. Ihr this wäre in der Zeichenfolge enthalten, nicht verkettet. Mit dem übergebenen Element würden Sie die href ähnlich wie im obigen Beispiel abrufen.

function goog_report_conversion(clicked_element) { 
    var href = $(clicked_element).attr("href"); 
    //do something with href 
}); 

$("a").attr("onclick", "return goog_report_conversion(this);"); 

aber sagen, dass bitte dies nicht tun.

+1

Vielen Dank für die ausführliche Antwort! Ich habe viel von Ihren Erklärungen und den von Ihnen angegebenen Links gelernt. – cstoddart

Verwandte Themen