2010-11-21 18 views
3

Merhaba ajax ile eklenen bir dizi öğeye sahip olabilen bir form var. Ancak bu satır eklendiğinde, yeni girişler odağı alamaz.Jquery Hakkında Eklenmiş form satırı hakkında nasıl söylenir

Bunu çözmeye çalışırken, bağlama işlevi sırasında bir uyarı tetiklendiğinde, odağı aldıklarını keşfettim.

Cevaplar için etrafa baktım ama işe yaramayacağım. Sanırım "canlı" işlevler alakalı olabilir ama nasıl kullanacağımı anlamıyorum.

Burada benim kodum var.

$("#doogal").bind("click", function (event) { 
    $.ajax({data:$("#doogal").closest("form").serialize(), dataType:"html", success:function (data, textStatus) {$("#saleitems").append(data);}, type:"get", url:"\/saleitems\/add\/" + $rows}); 
    $rows = $rows + 1; 
// alert("uncomment this to enable focus"); 
    $("#autoComplete_1").focus();  
    return false; 

}); 

Teşekkürler!

+0

'Canlı' etkinlik hakkında bilgi için, API: http://api.jquery.com/live/ adresine bakın. Temel olarak, şimdi veya gelecekte seçici ile eşleşen öğelere dinleyici atar. –

cevap

2

Zamanlama problemi gibi geliyor. $ .ajax, eşzamansız bir çağrıdır. Uyarıyı açıkladığınızda, ajax çağrısı yapılmadan önce ve başarı işlevi çağrılmadan ve yeni giriş eklenmeden önce .focus() çağrısı gerçekleşir. Uyarıyı eklediğinizde, bu, ajax çağrısının tamamlanabilmesi için .focus() çağrısını geciktirir.

.focus (Put) başarı işlevinde (ve ayrıca muhtemelen $ satır artım) çağrısı sadece ajax çağrı bittikten ishal sonra böylece:

$("#doogal").bind("click", function (event) { 
    $.ajax({data:$("#doogal").closest("form").serialize(), dataType:"html", success:function (data, textStatus) { 
     $("#saleitems").append(data); 
     $rows = $rows + 1; 
     $("#autoComplete_1").focus();  
    }, type:"get", url:"\/saleitems\/add\/" + $rows}); 
    return false; 
}); 
+0

omg. işe yaradı. Teşekkürler Erv! – Will

1

callback'inde içindeki odak vererek deneyin işlevi. Doğada eşzamansız bir AJAX kullandığınızdan, veri yüklenene kadar beklemeniz gerekecektir.

$("#doogal").bind("click", function (event) { 
    $.ajax({data:$("#doogal").closest("form").serialize(), 
     dataType:"html", 
     success:function (data, textStatus) { 
      $("#saleitems").append(data); 

      $rows = $rows + 1; 
      $("#autoComplete_1").focus(); 
     }, 
     type:"get", 
     url:"\/saleitems\/add\/" + $rows 
    }); 

    return false; 

}); 
+0

Zaman ayırdığınız için teşekkürler, bu & yukarıdaki cevap beni bitiş çizgisine ulaştı! – Will