2010-11-21 16 views
3

こんにちは私はajax経由で追加された項目の行を持つことができるフォームを持っています。しかし、この行が追加されると、新しい入力はフォーカスを受け取ることができません。Jqueryの追加フォーム行について

これを試してみると、バインド機能の実行中にアラートが発生した場合、フォーカスを受け取ることがわかりました。

私は答えを見回しましたが、うまく動作しません。私は "生きている"機能は関連しているかもしれないと思うが、実際にそれを使う方法は分からない。

ここは私のコードです。

$("#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; 

}); 

ありがとう!

+0

「ライブ」イベントの詳細については、http://api.jquery.com/live/のAPIをご覧ください。基本的には、現在または将来セレクタに一致する要素にリスナを割り当てます。 –

答えて

2

タイミングの問題のようです。 $ .ajaxは非同期呼び出しです。警告をコメントアウトすると、ajax呼び出しが完了する前、およびsuccess関数が呼び出されて新しい入力が追加される前に、.focus()の呼び出しが行われます。アラートを追加すると、.focus()コールがAjaxコールが完了するのに十分長く遅延します。

AJAX呼び出しが終了した後、それだけで実行されるように(また、おそらく$の行インクリメント)成功関数の呼び出しを.focusを入れて():

$("#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

mg。出来た。ありがとうErv! – Will

1

は、コールバックの内側にフォーカスを与えて試してみてください関数。本質的に非同期のAJAXを使用しているので、データがロードされるまで待つ必要があります。

$("#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

時間をとってくれてありがとう、この&上記の答えは、フィニッシュライン上に私を得た! – Will

関連する問題