2016-05-19 2 views
0

Ich habe Struktur html:Wie kann ich Funktion erstellen, den Wert von jQuery Methode attr zurück

<div> 
    <ul> 
     <li><img src="img/product1.png" alt="product1"></li> 
     <li><img src="img/product2.png" alt="product2"></li> 
     <li><img src="img/product3.png" alt="product3"></li> 
     <li><img src="img/product4.png" alt="product4"></li> 
    </ul> 
</div> 

und ich habe getan Versuch Funktion erstellen, die Attribute des aktuellen img-Elements erhalten wird, und ich will von diesem zurückzukehren Funktion dieses aktuelle Attribut, ich habe folgenden Code:

var sr = ""; 
function imgSrc(){ 
    $('div').on("click", "ul li img", function() { 
     sr = $(this).attr("src"); 
     return sr; 
    }); 
} 

console.log(imgSrc()); 

leider bekomme ich undefined in meiner Konsole.

+0

Sie müssen auf das Element klicken, um sein Attribut zu erhalten. Das ist, was dein Code bedeutet. –

Antwort

4

Ihre Funktion gibt nichts zurück. Es definiert nur einen onClick-Handler. Also das ist, warum Sie einen Rückgabewert von ‚undefined‘ get

Wenn Ihre Absicht ist es, die src eines div einzuloggen, wenn Sie darauf klicken, wird Ihr Code müssten mehr so ​​sein ...

$('div').on("click", "ul li img", function() 
{ 
    var sr = $(this).attr("src"); 
    console.log(sr); 
}); 

Das registriert den Ereignis-Listener für das Element.

Wenn Sie jedoch den Listener in eine Funktion umbrechen und dann diese Funktion aufrufen möchten, funktioniert das auch - die Funktion im Ein ("click") wird ausgelöst, wenn Sie auf ein Element klicken. Der Wert von sr wird festgelegt, aber die äußere Funktion selbst gibt keinen Wert zurück. Sie müßten eine anderen Weg finden, etwas mit dem Wert von sr, innerhalb der Funktion in dem auf („Klick“)

+0

Vielen Dank für Ihren Rat, aber ich brauche wirklich diese Lösung nicht nur für das Protokoll, ich würde meinen Code mit Funktionshilfe trennen, weil ich denke, es ist schöner, wenn ich in diesem Fall separate Methode habe. –

1

Sie Ihren Event-Handler

var sr = ""; 
function imgSrc(obj){ 
    if(obj.tagName == "IMG") 
     sr = $(obj).attr("src"); 
    else 
     sr = $(obj).find("img").attr("src"); 
    return sr; 
} 
$('div').on("click", "li img", function() { 
    console.log(imgSrc(this)); 
}); 
+0

Vielen Dank für Hilfe! –

+0

Sie sind willkommen :) –

0

vor dem Aufruf Funktion setzen müssen tun, wenn ich verstehe, richtig, Sie möchten, dass sr den Attributwert hat?

var sr = ""; 
$('div').on("click", "ul li img", function() { 
    sr = $(this).attr("src"); 
}); 

console.log(sr); 
+0

Ja, Sie haben Recht. –

Verwandte Themen