如何为多个输入添加带有jquery的输入字段?

时间:2015-12-09 06:23:31

标签: php jquery

我希望能够为n位作者添加n本书。我想做的是:

example1

浅蓝色框是按钮。我想通过“添加书籍”按钮为作者添加多本书。

我的代码是:

   <form action="next.php" method="post">
        <div class="input_fields_wrap">
            <button class="add_field_button">Add Author</button>
            <div><input type="text" name="myAuthorText[]"></div>
            <button class="add_sub_field_button">Add Author Books</button>
            <div><input type="text" name="myBooksText[]"></div>
        </div>
    </form>    

<SCRIPT language="javascript">

    $(document).ready(function() {
    var max_fields      = 10; //maximum input boxes allowed
    var wrapper         = $(".input_fields_wrap"); //Fields wrapper
    var add_button      = $(".add_field_button"); //Add button ID
    var add_subButton      = $(".add_sub_field_button"); //Add sub button ID

    var x = 1; //initlal text box count
    $(add_button).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ //max input box allowed
            x++; //text box increment
            $(wrapper).append('<div><input type="text" name="myAuthorText[]"/><a href="#" class="remove_field">Remove</a></div>'); //add input box
        }
    });

    $(add_subButton).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ //max input box allowed
            x++; //text box increment
            $(wrapper).append('<div><input type="text" name="myBooksText[]"/><a href="#" class="remove_field">Remove</a></div>'); //add input box
        }
    });
    $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
        e.preventDefault(); $(this).parent('div').remove(); x--;
    })
});

</SCRIPT>

我得到的是:

example2

3 个答案:

答案 0 :(得分:1)

检查此代码段。我也用HTML和Javascript制作了一些内容。请将其与原始版本进行比较以查看差异。希望它会对你有所帮助:

$(document).ready(function() {
    var max_fields      = 10; //maximum input boxes allowed
    var wrapper         = $(".input_fields_wrap"); //Fields wrapper
    var commonPart      = $("#commonPart"); 
    var add_button      = $(".add_field_button"); //Add button ID
    var add_subButton      = $(".add_sub_field_button"); //Add sub button ID

    var x = 1; //initlal text box count
    $(add_button).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ //max input box allowed
            var htmlToAdd = commonPart.clone().attr("id","commonPart_"+x);
            htmlToAdd.find(".addedDiv").remove();
            $(wrapper).append(htmlToAdd); //add input box
          x++; //text box increment
        }
    });

    $(document).on("click",".add_sub_field_button",function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ //max input box allowed
            x++; //text box increment
            $(this).closest(".commonPart").append('<div class="addedDiv"><input type="text" class="bookname" name="myBooksText[]" placeholder="Book name"/><a href="#" class="remove_field">Remove</a></div>'); //add input box
        }
    });
    $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
        e.preventDefault(); $(this).parent('div').remove(); x--;
    })
});
.bookname{
  margin-left: 30px;
  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <form action="next.php" method="post">
        <div class="input_fields_wrap">
            <button class="add_field_button">Add Author</button>
            <div id="commonPart" class="commonPart">
            <div><input type="text" name="myAuthorText[]" placeholder="Auth name"></div>
            <button class="add_sub_field_button">Add Author Books</button>
            <div><input type="text" class="bookname" name="myBooksText[]" placeholder="Book name"></div>
             </div> 
        </div>
    </form> 

答案 1 :(得分:0)

您可以使用jquery.clone()

像这样:

$( "#id-of-input" ).clone().appendTo( "#id-of-same-div" );

将其置于按钮内。

JSFiddle

答案 2 :(得分:0)

不是完整的答案,但这会给您正在寻找的嵌套,并允许您向多位作者添加书籍。我无法让“保存”正常工作,我怀疑你问题中的脚本不是完整的脚本。

主要变化:

  • 为缩进书籍添加样式
  • 在有作者
  • 之前不显示添加书籍按钮
  • 在每位作者下方添加“添加书籍”按钮
  • 在作者块内添加书籍,而不是顶级包装块

声明:

正如我上面提到的,我无法完全测试。这个答案是“你可能会发现这样的东西有用”,而不是“我已经完全解决了你的问题,请复制+粘贴+部署”。

  <form action="next2.php" method="post">
        <div class="input_fields_wrap">
            <button class="add_field_button">Add Author</button>
            <div><input type="text" name="myAuthorText[]"></div>
        </div>
    </form>    

<style>
.author_wrap button,
.author_wrap input { 
  margin-left: 10px;
} 
</style>
<script type="text/javascript">

    $(document).ready(function() {
    var max_fields      = 10; //maximum input boxes allowed
    var wrapper         = $(".input_fields_wrap"); //Fields wrapper
    var author_wrapper  = $(".author_wrap"); // Author's book fields wrapper
    var add_button      = $(".add_field_button"); //Add button ID
    var add_subButton      = $(".add_sub_field_button"); //Add sub button ID

    var x = 1; //initlal text box count
    $(add_button).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ //max input box allowed
            x++; //text box increment
            $(wrapper).append('<div class="author_wrap"><input type="text" name="myAuthorText[]"/><a href="#" class="remove_field">Remove</a><br/><button class="add_sub_field_button">Add Author Books</button><div><input type="text" name="myBooksText[]"></div></div>'); //add input box
        }
    });

    $(add_subButton).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ //max input box allowed
            x++; //text box increment
            $(author_wrapper).append('<div><input type="text" name="myBooksText[]"/><a href="#" class="remove_field">Remove</a></div>'); //add input box
        }
    });
    $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
        e.preventDefault(); $(this).parent('div').remove(); x--;
    })
});

</script>

注意:我冒昧用type='text/javascript'替换脚本标记上的depracated language attribute