-1

我使用 jquery 并希望每个表单文本输入一个一个出现,用户输入数据然后下一个出现。在他们完成单个问题段中的整个表单后,我希望提交整个表单的回复。

这可能吗?还是我必须让表格完整显示才能获得我想要的结果?

提前致谢。

4

6 回答 6

3

哇,每个人都比我快,好吧,我会把手放在锅里:

这个 jsFiddle向您展示了我提出的实现。它显示了您基本上如何遍历表单以获取下一个容器并在按下回车键 (13) 时显示它。

不要忘记 stopPropagation / preventDefault 否则当按下回车键时你最终会提交表单。

您可以为该项目是最后一个调用 $(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;
    });

用输入键按下当前输入触发新输入

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

我建议在表单中包含所有输入,并在用户完成输入后简单地隐藏和显示。

$("#next").click(function() {        
    $("input").hide();
    $("input").eq(++currentIndex).show();
});
于 2012-06-22T19:43:01.453 回答
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 回答