【问题标题】:Dynamically add equal select form fields with data taken from php使用从 php 获取的数据动态添加相等的选择表单字段
【发布时间】:2011-07-20 23:17:12
【问题描述】:

我有一个表单,其中包含动态生成的选择字段以及从 php 中获取的选项(所有选择都相同)。但我需要每个<select>...</select> 必须显示在不同的行中。这可以通过将每个 <select>...</select> 包含在 <div>...</div> 中来完成。

这是我拥有的代码,它可以工作,但选择字段不在 div 中:

<script type="text/javascript">
//<![CDATA[ 
$(function(){
var counter = 1;

$("#addButton").click(function () {

if(counter>10){
        alert("Only 10 textboxes allow");
        return false;
}   

var select = $('<select>').attr({id:'select'+counter,name:'select'+counter});

$.ajax({
url: 'selects.php',
dataType: "html",
success: function(data) {
select.html(data);
}
});        

select.appendTo("#TextBoxesGroup");
counter++;
});

$("#removeButton").click(function () {
if(counter==1){
   alert("No more textbox to remove");
   return false;
}   

counter--;
$("#select" + counter).remove();

});

$("#getButtonValue").click(function () {

var msg = '';
for(i=1; i<counter; i++){
  msg += "\n Textbox #" + i + " : " + $('#textbox' + i).val();
}
   alert(msg);
});
});
//]]> 
</script>

<div id='TextBoxesGroup'>
<div id="TextBoxDiv1">
    <label>Textbox #1 : </label><input type='text' id='textbox1' >
</div>
<div id="TextBoxDiv2">
    <label>Textbox #2 : </label><input type='text' id='textbox2' >
</div>
</div>
<input type='button' value='Add Button' id='addButton'>
<input type='button' value='Remove Button' id='removeButton'>
<input type='button' value='Get TextBox Value' id='getButtonValue'>

这是select.php生成的html代码:

<option value="1">Uno</option>
<option value="2">Dos</option>
<option value="3">Tres</option>
<option value="4">Cuatro</option>

【问题讨论】:

  • amparo69,您应该回滚对原始问题的提出和回答方式的编辑。这将是关于版本 5。过多地改变问题的性质是不受欢迎的。 (改为问一个新问题。)我已经为你回滚了这个问题。接下来我去看看新的问题。

标签: php jquery forms select


【解决方案1】:

使用the wrap() function。 :

将此代码放在counter++; 之前。 :

$("#TextBoxesGroup > select").wrap ( function () {
    return '<div id="wrap_' + this.id + '"></div>';
} );


See it in action at jsFiddle.

【讨论】:

  • 效果不好。我需要每个 都必须在
    ...
    内。我使用的代码是:select.appendTo("#TextBoxesGroup"); $("#TextBoxesGroup 选择").wrap (function () { return '
    '; } );就在柜台++之前;它可以工作,但它会在之前的选择中添加越来越多的 div,因此选择不会很好地显示在左侧,并且每行中都没有一个选择。
  • 查看更新后的答案。还要记住,没有两个元素可以拥有相同的id 而不会发生坏事。
  • 太棒了!它现在正在工作。非常感谢。但需要: select.appendTo("#TextBoxesGroup");就在您发布的代码之前。请更新它以使其适合所有人。
  • 最后一件事。删除按钮无法正常工作。如果单击“删除”,则选择消失,但是如果单击“添加”,则新选择会出现在已删除的下方,而不仅仅是在已删除的位置。我试过 $("#select" + counter).remove();和 $("#wrap_" + counter).remove();它是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2013-10-07
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
相关资源
最近更新 更多