如何从文本输入名称中选择最高值并添加具有更高值的另一个字段?

时间:2014-03-19 21:37:35

标签: php jquery

我有一个函数,可以创建文本输入集:

jQuery(function($) {
    var scntDiv = $('#textfields');
    var i = $('#textfields p').size() + 2;
    var a = 0;
    $('#addbutton').click (function() {
        $('<p><input type="text" id="test_testbutton" name="test_testbutton['+a+'][0]" value="" placeholder="Input Value" /><input type="text" id="test_testbutton" name="test_testbutton['+a+'][1]" value="" placeholder="Input Value" /><a href="#" id="removebutton">Remove</a></p>').appendTo(scntDiv);
        i++;
        a++;
        return false;
    });
    $('#removebutton').live('click',function() { 
        if( i > 2 ) {
        $(this).parents('p').remove();
        i--;
        }
        return false;
    });
});

正如您所看到的那样,它会在每个输入的名称中添加名称&#39;字段增量值。它看起来像:

name="test_testbutton[0][0]",  name="test_testbutton[1][0]", name="test_testbutton[2][0]", etc.

该功能可以根据需要删除所选输入。它与一些PHP代码(代码看起来并不重要)相关联,这样可以保存所有内容并将其存储为数组。创建阵列时,将显示已保存的输入。他们在姓名中的号码相同。通过上述函数将字段作为先前的cerated字段。所以它看起来像:

<p><input type="text" id="" name="test_testbutton[0][0]" value="" placeholder="" />
<input type="text" id="" name="test_testbutton[0][1]" value="" placeholder="" /></p>

<p><input type="text" id="" name="test_testbutton[1][0]" value="" placeholder="" />
<input type="text" id="" name="test_testbutton[1][1]" value="" placeholder="" /></>

依旧......

但问题出现时,保存后,我想添加另一个文本输入。我的jQuery函数从0开始计数。我希望它能找到每个名字的最高值&#39;字段并创建具有更高值的其他输入,例如:

如果&#39;名称&#39;具有最高值的输入是&#39; name =&#34; test_testbutton [25] [0]&#39;克隆后添加&#39;它会创建&#39; name =&#34; test_testbutton [26] [0]&#39;等等......

现在!..我的问题,badam tsss !!:如何实现它?


修改<!/强>

整个PHP代码基于表单提交。我想我没有提供关于我的jQuery函数的PHP代码的足够细节,所以它是:

与上面提供的jQuery直接相关的函数,它将输入文本存储为数组&#39; test_testbutton&#39;,由于下面显示的代码,所有内容都显示为输入集:

<a href="#" id="addbutton">Add</a>
<div id="textfields">
    <?php
if (isset($_POST['test_testbutton']) && is_array($_POST['test_testbutton'])) {
    $_POST['test_testbutton'];}

$textfields = get_option('test_testbutton');
    if (!empty($textfields)) {
        foreach ($textfields as $key => $textfield):?>
<p><input type="text" id="test_testbutton" name="test_testbutton[<?php echo $key;?>][0]" value="<?php echo $textfield[0];?>" placeholder="Input Value" /><input type="text" id="test_testbutton" name="test_testbutton[<?php echo $key;?>][1]" value="<?php echo $textfield[1];?>" placeholder="Input Value" /><a href="#" id="removebutton">Remove</a></p><?php
    endforeach;}
?>
</div>

一个在提交时保存数据库中的所有内容的函数:

function theme_settings_page() {
    global $themename,$theme_options;
    $i=0;
    $message='';
        if ( 'save' == $_REQUEST['action'] ) {

            foreach ($theme_options as $value) {
        update_option( $value['id'], $_REQUEST[ $value['id'] ] ); }

            foreach ($theme_options as $value) {
        if( isset( $_REQUEST[ $value['id'] ] ) ) { update_option( $value['id'], $_REQUEST[ $value['id'] ]  ); } else { delete_option( $value['id'] ); } }
$message='saved';
}

else if( 'reset' == $_REQUEST['action'] ) {

            foreach ($theme_options as $value) {
        delete_option( $value['id'] ); }
$message='reset';
}
        if ( $message=='saved' && $i==0 )  echo '<div id="message" class="apply"><strong>Saved.</strong></div>' ;
        if ( $message=='reset' ) echo '<div id="message" class="reset"><strong>Reset.</strong></div>';

?>

所以,我需要一个能够搜索所有&#39; test_testbutton [&#39; + a +&#39;] [0]&#39;在提交时保存的网站上的值,当我点击添加按钮时,它代替[&#39; + a +&#39;]&#39;最高值+ 1&#39;。

3 个答案:

答案 0 :(得分:0)

使用Cookie在重新加载中保存a的值:

jQuery(function($) {
    var scntDiv = $('#textfields');
    var i = $('#textfields p').size() + 2;
    var a = $.cookie("testButtonCount");;
    $('#addbutton').click (function() {
        $('<p><input type="text" id="test_testbutton" name="test_testbutton['+a+'][0]" value="" placeholder="Input Value" /><input type="text" id="test_testbutton" name="test_testbutton['+a+'][1]" value="" placeholder="Input Value" /><a href="#" id="removebutton">Remove</a></p>').appendTo(scntDiv);
        i++;
        a++;
        $.cookie("testButtonCount", a);
        return false;
    });
    $('#removebutton').live('click',function() { 
        if( i > 2 ) {
        $(this).parents('p').remove();
        i--;
        }
        return false;
    });
});

此解决方案需要this plug-in

答案 1 :(得分:0)

如果您通过ajax调用运行save / remove php,则可以将计数(_a)保存在DOM变量中。将ID放在容器元素上,这样可以更轻松地删除它们。

    var _a = 0;
        jQuery(function($) {
            var scntDiv = $('#textfields');
            $('#addbutton').click (function() {
                $('<p id="p'+_a+'"><input type="text" id="test_testbutton" name="test_testbutton['+_a+'][0]" value="" placeholder="Input Value" /><input type="text" id="test_testbutton" name="test_testbutton['+_a+'][1]" value="" placeholder="Input Value" /><a href="#" onclick="removeRow('+_a+');return false;">Remove</a></p>').appendTo(scntDiv);
                _a++;
                $.post('save.php', {id:_a});
                return false;
            });
        });

        function removeRow(id){
            if( $('#textfields p').size() > 2 ) {
                $.post('remove.php',{id: id});
                $('#p'+id).remove();
                // don't decrease _a on the remove. Keeps your ids unique
            }
        }

答案 2 :(得分:0)

很抱歉打扰你们,我真的是(我没有给你足够的细节来正确回答我的问题:()!我自己找到了一个无缝的解决方案。我做的是移动整个jQuery代码进入一个PHP文件,然后我找到了一个最高的数组键值并在jQuery循环中使用,这里是:

<input name="save" class="addbutton button" type="submit" value="+" />
<div id="textfields">
    <?php
if (isset($_POST[$value['id']]) && is_array($_POST[$value['id']])) {
    $_POST[$value['id']];}

$textfields = get_option($value['id']);
    if (!empty($textfields)) {
        foreach ($textfields as $key => $textfield):
            ?><p><input type="text" id="<?php echo $value['id']; ?>" name="<?php echo $value['id'];?>[<?php echo $key;?>][0]" value="<?php echo $textfield[0];?>" placeholder="Input Value" /><input type="text" id="<?php echo $value['id']; ?>" name="<?php echo $value['id']; ?>[<?php echo $key;?>][1]" value="<?php echo $textfield[1];?>" placeholder="Input Value" /><a href="#" id="removebutton">Remove</a></p>
<?php endforeach;
     $max = max(array_keys($textfields))+1;}
     else {
    $max = 0;}
?>
</div>
<script type="text/javascript">
jQuery(function($) {
    var scntDiv = $('#textfields');
    var i = $('#textfields p').size() + 2;
    var x = <?php echo $max;?>;
    var a = x;
    $('.addbutton').click (function() {
        $('<p><input type="text" id="<?php echo $value['id']; ?>" name="<?php echo $value['id']; ?>['+a+'][0]" value="" placeholder="Input Value" /><input type="text" id="<?php echo $value['id']; ?>" name="<?php echo $value['id']; ?>['+a+'][1]" value="" placeholder="Input Value" /><a href="#" id="removebutton">Remove</a></p>').appendTo(scntDiv);
        i++;
        a++;
        return false;
    });
    $('#removebutton').live('click',function() {
        if( i > 2 ) {
        $(this).parents('p').remove();
        i--;
        }
        return false;
    });
});

现在,每次点击“添加”按钮它查找最高键值并添加一个带Key + 1值的输入:)