2011-01-17 17 views
0

ich viele dieser Schnipsel Code haben:jQuery .live und parent() Problem

<li> 
    <label> 
    <a title="Cadeo"> 
     <span class="container"> 
     <img class="shadow" src="../public/4cf54b32bd723_small.jpg" alt="" /> 
     </span> 
    </a> 
    <input name="Trailer" type="radio" value="1" /> 
    <span class="change">Seleziona</span> 
    </label> 
</li> 

Dank dieser jQuery-Code, wenn sie auf Tag-Klick (enthält alle) die "Seleziona" Text wird mit einem ersetzt Taste tag:

$('label').click(function(){ 
    $('label').children('span.change').html('Seleziona'); // reset the others li's text 
    $(this).children('span.change').html('<button type="button" class="small middle"><img src="../images/vota-small.png" alt="" /></button>') 
}) 

Jetzt kommt den schwierigen Teil: ich versuche, den Wert des Radio Eingangs-Tages zu fangen, aber das funktioniert nicht (ich die .live Funktion verwenden, da die Schaltfläche erstellt wird, Laufzeit)

$('button').live('click', function(){ 
    alert($(this).parent().siblings('input').val()); 
}) 

Wo liege ich falsch? Ich erhalte immer "undefined" ... Vielen Dank im Voraus für die Antworten

Wenn es helfen kann, ist hier eine Live-Version: http://jsfiddle.net/H4Gsq/

Antwort

0

Erstens, warum die parent()? Die Eingabe ist das Geschwister der Spanne, nicht das Geschwister des Elternteils. Zweitens werden beide Event-Handler ausgelöst, wenn Sie auf die Schaltfläche klicken. stopPropagation ist keine Hilfe, da live selbst auf Ereignisblasen beruht; Live-Event-Handler feuern auch nach normalen Event-Handlern. Sie sollten event.target überprüfen und wenn es eine Schaltfläche ist, überspringen Sie den Click-Handler des Labels.

Vergessen Sie den ersten Teil, ich habe den Code nicht sorgfältig gelesen. Wie auch immer, hier ist eine korrigierte Version: http://jsfiddle.net/H4Gsq/1/

+0

Danke, das funktioniert perfekt mit der Warnung ... Das Problem ist, dass die Warnung zum Debuggen war, und ich habe etwas Code das feuert nicht ... Ich denke ich werde es anders versuchen ... – Ivan

1

testen Werden -

$('button').live('click', function(e){ 
    e.stopPropagation(); 
    alert($(this).parent().prev('input').val()); 

}) 

Eigentlich, wenn Sie auf Button zu diesem Zeitpunkt würde dieser Klick sogar propagieren, um Label und damit Label-Klick-Funktion wird auch ausgelöst werden. Dieser Effekt wird als Blasenbildung bezeichnet. Ereignis zu Schritt sprudelnden i e.stopPropagation()

+0

nein, es ist immer noch "undefined" :-( – Ivan

0

warum nicht eine benutzerdefinierte Trigger ausgelöst verwendet haben und es dann entsprechend manipulieren ...

$("input[type='radio']").trigger("checked"); 

$("input[type='radio']").live('checked',function(){ 

alert($(this).parent().prev('input').val()); 

})