2009-07-31 10 views
4

Ich benutze Jquery laden und dann, sobald der Inhalt in das Div geladen wird, ich möchte einige der Tags zu sprachabhängigen Variablen ändern.Jquery laden und dann geladenen Inhalt bearbeiten

Mein Problem ist, dass ich ein settimeout verwenden muss, um das Skript lange genug warten zu lassen, damit die Elemente zum Bearbeiten bereit sind.

Wenn ich den Callback-Funktionsparameter verwende, sind die Elemente, die ich bearbeiten möchte, anscheinend nicht bereit, weil sie nicht gesetzt werden. Ich hasse es, settimeout zu verwenden, weil dies jeden auf die langsamste Einstellung beschränkt und einige Verbindungen sind immer noch langsamer.

Scheinbar bedeutet die Callback-Methode nur, dass die Ajax-Methode den HTML-Code zurückbekommt, aber es stellt nicht sicher, dass die importierten Elemente tatsächlich in dom bereit sind.

Wer hat Ideen?

aktuellen Code

$("#content-basket").load("/BasketPage.htm?time=" + now.getMilliseconds()); 
... 
... 
setTimeout("timedbasket();", 500); 
... 
... 
function timedbasket() { 
    alert($('#basketlegend')); 
    $('#basketlegend').html(basketlabel); 
} 

Ich mag wäre in der Lage sein

$("#content-basket").load("/BasketPage.htm?time=" + now.getMilliseconds(), "", timedbasket()); 

Hier zu verwenden ist die basket.htm Quelle

<tr> 
    <td> 
     <div id="basket"> 
      <fieldset> 
       <legend><span id="basketlegend"></span></legend> 
       <table id="baskettbl" border="0" class="basket-table"> 
        <tbody> 
         <tr class='total'> 
          <td> 
           <span id="empty"></span> 
          </td> 
         </tr> 
        </tbody> 
       </table> 
      </fieldset> 
     </div> 
    </td> 
</tr> 
+2

'$ (" # content-basket "). Load (...," ", timedbasket())' sollte '$ sein (" # content-basket "). Load (...," ", timedbasket) ', so dass Sie die timedbasket-Funktion übergeben, anstatt timedbasket aufzurufen und seinen Rückgabewert zu übergeben. –

+0

Das war die Antwort, also denke ich, dass du keine Parameter in der Callback-Deklaration übergeben kannst und du nur den Funktionsnamen eingibst. Danke! Danke an alle, die geantwortet haben, aber Patrick hat diese bekommen. – MvcCmsJon

Antwort

2

Verwenden Sie den Callback-Parameter für Last und setzen Ihr Code im Rückruf.

$("#content-basket").load("/BasketPage.htm?time=" + now.getMilliseconds(),null, 
    function() { 
      ...do stuff here after #content-basket is finished loading... 
}); 

Nachdem bei jQuery suchen, scheint es sicher, wie die Antwort, bevor Rückrufe aufgerufen werden injiziert wird, so sollte das DOM aktualisiert werden. Ist es möglich, dass Sie jQuery-Objekte wiederverwenden, die möglicherweise auf DOM-Elemente verweisen, die zuvor dort waren, aber durch das Laden ersetzt wurden?

+0

Ich habe die Callback-Methode versucht, aber die importierten Elemente werden nicht gesetzt, wenn Sie die Callback-Methode verwenden, sie sind noch nicht vollständig in der Dom geladen. – MvcCmsJon

+0

Haben Sie mein Update gesehen? – tvanfosson

+0

Ja, ich habe Ihren Code kopiert und das Warenkorb-Label wird immer noch nicht gesetzt. Ich dachte, die Callback-Methode bedeute, dass das Dom bereit sei, aber anscheinend nicht. – MvcCmsJon

0

jQuery.live ist die Antwort. Binden Sie Ihre Events auf diese Weise an die DOM-Elemente und sogar neue werden davon betroffen sein.

+0

Dies würde funktionieren von Live akzeptiert das Onload-Event von Basketlegend. Mögliche Ereigniswerte: klicken, dblclick, mousedown-, mouseup, mousemove-, Mouseover, mouseout, keydown, keypress, keyup Zeit nicht unterstützt: Unschärfe, Fokus, MouseEnter-, mouseleave, ändern, obwohl Nizza neues Feature von jquery einreichen. – MvcCmsJon

Verwandte Themen