【问题标题】:jQuery changing attribute elementsjQuery改变属性元素
【发布时间】:2010-12-23 13:05:51
【问题描述】:

我正在处理一个表单,当用户单击“添加服务器”时,会重复一个 div 块。我设法解决了这个问题。但是,如果我只有一个服务器块,我想要属性 name="servername",如果有更多元素,则所有块上的属性都应该是 name="servername[]"

我试过了,唯一有效的是点击添加服务器第一个和第二个块得到name="servername[]",但是当我再点击一次时,第一个块得到name="servername[][]"

$('#addserver').click(function() {
var num  = $('.clone').length;  // how many "duplicatable" input fields we currently have
var newNum = new Number(num + 1);  // the numeric ID of the new input field being added

// Create the new element via clone(), and manipulate it's ID using newNum value
var newElem = $('#server1').clone().attr('id', 'server' + newNum);

// Insert the new element after the last "duplicatable" input field  
$('#server' + num).after(newElem);

// Add [] for PHP array
$('#server' + num + ' input', '#server' + newNum + ' input').attr('name', function() {
 return this.name + '[]';
});

// Enable the "remove" button
$('#delserver').attr('disabled','');

// You can only add 5 elements
if (newNum == 5) $('#addserver').attr('disabled','disabled');
});

$('#delserver').click(function() {
var num = $('.clone').length; // how many "duplicatable" input fields we currently have
$('#server' + num).remove(); // remove the last element

// enable the "add" button
$('#addserver').attr('disabled','');

// If only one element remains
if (num-1 == 1) {

    // Remove [] because it's not php array anymore
    $('#server1 input').attr('name', function() {
        s = this.name.substring(0, this.name.length - 2);
        return s;
    });

    // Disable "remove" button
    $('#delserver').attr('disabled','disabled');
}
});

$('#delserver').attr('disabled','disabled');

这里是 html 示例:

<div class="clone" id="server1">
  <input type="text" name="servername" size="40" />
</div>

由于 php 数组,我需要 [],但如果用户正在输入一台服务器并且名称中有 [],则它不起作用。

【问题讨论】:

    标签: php jquery html arrays


    【解决方案1】:

    我认为无论如何你都应该拥有name="servername[]"

    因为当servername 包含多个元素时,你可以让它工作,我看不出是什么阻止你让它只用一个(甚至根本没有)元素正常工作。

    如果您不完全相信,请考虑一下您现在遇到了多少麻烦,并试图与我的建议作斗争。

    【讨论】:

    • 当只有一台服务器时,他还必须有不同的逻辑分支。
    【解决方案2】:

    添加支票

    if ($(this).attr('name').substr(-2) != '[]') {
        return $(this).attr('name') + "[]";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2022-08-15
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      相关资源
      最近更新 更多