CakePHP 多输入 jQuery 插件

我为我的英语道歉!这个插件可以帮助你创建自动添加的输入。它们可以通过添加书籍的几页来使用。如有任何问题,请联系 men__1@mail.ru

视图代码

<?php
echo $this->Html->script('jquery-1.7.1.min');
echo $this->Html->script('jquery.multinput');
echo $this->Form->create();
echo $this->Form->input('User.name');
?>
<div id="multi-input">
    <?php
    echo $this->Form->input('User.Children.multi_i.name');
    echo $this->Form->input('User.Children.multi_i.age');
    ?>
</div>
<?php
echo $this->Form->end('test');
?>
<script>
$(function() {
    $("#multi-input").multinput();
});
</script>

插件选项

  • myPag - 分页器对象。如果没有传递,分页器将在当前对象之后发布。
  • iterator - 要用数组索引替换的字符串
  • addText - 添加输入按钮的文本
  • hideOld - 是否隐藏新输入

jQuery 插件代码

jQuery.fn.multinput = function(options) {
    var options = jQuery.extend({
        myPag: false,
        iterator: "multi_i",
        addText: "Add",
        hideOld: true
    }, options);

    var deffContent;
    var count = 1;
    return this.each(function(){
        var thisM = this;
        deffContent = jQuery(thisM).clone();
        var tmpContent = deffContent.clone();
        tmpContent.find("input").each(function() {
            jQuery(this).attr("name", jQuery(this).attr("name").replace(options.iterator, count));
        });
        jQuery(thisM).html("<div multi_i='" + count + "'>" + tmpContent.html() + "</div>");
        if(options.myPag == false) {
            jQuery(thisM).after("<div id='multi-paginator'></div>");
            var paginator = jQuery("#multi-paginator");
        } else {
            var paginator = options.myPag;
        }
        paginator.html("<ul><li><a class='multi-add' href='#'>" + options.addText + "</a></li><li class='active'><a href='#'>" + count + "</a></li></ul>");
        if(options.hideOld) {
            paginator.find("ul li a").live("click", function() {
                if(!jQuery(this).hasClass("multi-add")) {
                    var id = $(this).text();
                    jQuery(thisM).children().each(function() {
                        if($(this).attr("multi_i") == id) {
                            $(this).show();
                        } else {
                            $(this).hide();
                        }
                    });
                }
            });
        }
        paginator.find("ul li a.multi-add").click(function() {
            count++;
            paginator.find("ul li").removeClass("active").parent().append("<li class='active'><a href='#'>" + count + "</a></li>");
            var tmpContent = deffContent.clone();
            tmpContent.find("input").each(function() {
                jQuery(this).attr("name", jQuery(this).attr("name").replace(options.iterator, count));
            });
            if(options.hideOld) {jQuery(thisM).children().hide();};
            jQuery(thisM).append("<div multi_i='" + count + "'>" + tmpContent.html() + "</div>");
        });
    });
};

结果

Array
(
    [User] => Array
        (
            [name] => menOne
            [Children] => Array
                (
                    [1] => Array
                        (
                            [name] => Max
                            [age] => 34
                        )

                    [2] => Array
                        (
                            [name] => Jon
                            [age] => 23
                        )

                    [3] => Array
                        (
                            [name] => Frad
                            [age] => 5
                        )

                )

        )

)

如有任何问题,请联系 men__1@mail.ru