-1

私はjqueryを使用しており、各フォームのテキスト入力を1つずつ表示し、ユーザーがデータを入力してから次のテキストを表示したいと考えています。単一の質問セグメントでフォーム全体を完成させた後、フォーム全体の回答を送信してもらいたいです。

これは可能ですか?または、目的の結果を得るには、フォーム全体を表示する必要がありますか?

前もって感謝します。

4

6 に答える 6

3

うわー、誰もが私より速いです、まあ、私はポットに手を投げます:

この jsFiddleは、私が思いついた実装を示しています。次のコンテナーを取得するためにフォームを基本的にトラバースし、Enter キー (13) が押されたときにそれを表示する方法を示しています。

stopPropagation / preventDefault を忘れないでください。そうしないと、Enter キーを押したときにフォームが送信されてしまいます。

item が $(this).parents("form").submit(); を呼び出す最後の要素である場合の例外を追加できます。次の要素を見つけて表示しようとする代わりに。

于 2012-06-22T19:54:56.487 に答える
1

新しい入力をトリガーするアンカー付き

$(document).on('click','a.more-inputs',function(){
    $lastInput = $(this).prev('input[type="text"]'); //anchor should be next element of present input otherwise use a different selector input.one-more:last-child or so
    if($lastInput.val() && $lastInput){
        $(this).before($lastInput.clone().val(''));//anchor should be where last comment says or else use different code
        }
    else{
        $lastInput.focus();
        }
    return false;
    });

満たされた入力のぼかしイベントで新しい入力をトリガーします

$(document).on('blur','input[type="text"].one-more',function(){
    $lastInput = $(this);
    if($lastInput.val() && $lastInput){
        $(this).after($lastInput.clone().val(''));
        }
    else{
        $lastInput.focus(); //fill this before getting next one
        }
    return false;
    });

現在の入力でEnterキーを押すと、新しい入力がトリガーされます

$(document).on('keypress','input[type="text"].one-more',function(e){
    if(e.keyCode == 13){
     $lastInput = $(this);
      if($lastInput.val() && $lastInput){
        $(this).after($lastInput.clone().val(''));
        }
     else{
        $lastInput.focus(); //fill this before getting next one
        }
    }
    return false;
    });
于 2012-06-22T19:50:30.660 に答える
0

各フォーム要素を div でラップして、フォーム全体をレンダリングできます。

<form>
  <div class="control-wrap">
    <label for="a">Field label</label>
    <input type="text" name="a">
  </div>
  <div class="control-wrap">
    <label for="b">Second Field label</label>
    <input type="text" name="b">
  </div>
  ...
</form>

最初のラッパーを除くすべてのラッパーを非表示にし、ユーザーが各要素をぼかすと、次のラッパーを表示しますが、(1) 次のフォーム要素がまだ非表示であり、(2) ユーザーがフィールドに何かを入力した場合に限ります。

$('.control-wrap').hide().eq(0).show();
$('input').on('blur',function(e){
  var input = $(this);
    if(input.val().length > 0) {
      input.parents('.control-wrap').next('.control-wrap:hidden').show().find('input').focus();
    }            
});

これは非常に単純化されており、そのままのテキスト フィールドに対してのみ機能しますが、出発点として機能することを願っています。

于 2012-06-22T19:48:00.450 に答える
0

これを試してください

            $(document).ready(function(){
                $('input:text').keypress(function(e){

                    var code = (e.keyCode ? e.keyCode : e.which);
                     if(code == 13) { //Enter keycode
                       $(this).next().show();
                       $(this).hide();
                     }
                });

            });
于 2012-06-22T19:49:10.357 に答える
0

このようなものから始めることができます。

于 2012-06-22T19:49:22.033 に答える
0

すべての入力をフォームに入れ、ユーザーが 1 つの操作を完了したら、単純に非表示にして表示することをお勧めします。

$("#next").click(function() {        
    $("input").hide();
    $("input").eq(++currentIndex).show();
});
于 2012-06-22T19:43:01.453 に答える