正如标题所说,我想要做的是让jQuery根据在下拉列表中选择的值添加一些额外的字段集,下框。例如,当页面加载时,下拉列表的默认值为1,并显示默认字段集。现在,如果用户在该下拉列表中选择了不同的值,则应该通过克隆来相应地调整字段集的数量(我想这应该是最好的解决方案)。这是我到目前为止有:使用jQuery根据下拉框的值动态添加表单字段(或字段集)
下拉框代码...
<select id="itemCount" name="itemCount">
<option value="1">1 item</option>
<option value="2">2 items</option>
<option value="3">3 items</option>
<option value="4">4 items</option>
<option value="5">5 items</option>
<option value="6">6 items</option>
</select>
... jQuery的变化听者...
$(document).ready(function() {
$("#itemCount").change(function(){
var itemCountVal = jQuery(this).val();
$("#item_dup_1").fieldsManage(itemCountVal);
});
});
...和功能本身(它实际上是基于我以为是什么,我需要一个良好的起点,一个jQuery插件):
jQuery.fn.fieldsManage = function (number) {
var clone,
objTemplate = source.clone(true),
source = jQuery(this),
maxClones = number - 1,
clones = [];
if (clones.length < maxClones) {
while (clones.length < maxClones) {
clone = objTemplate.clone(true).insertAfter(clones[clones.length - 1] || source);
clones.push(clone);
}
}
if (clones.length > maxClones) {
// Fieldsets removal function goes here.
}
}
的对象是作c像是<fieldset id="item_dup_1"><input><input><input></fieldset>
。我不认为有必要展示完整的代码。
这对于第一次更改很有用,但如果用户再次更改该值,那就是出现问题时,而不是显示正确数量的字段集,它会显示更多信息。它看起来像是从头开始计算所需的字段集的数量,而忽略了字段集已被添加的事实,而这正是我的问题所在。我还有一个函数(这里没有显示只是为了保持问题清晰和尽可能简短),将新的ID分配给克隆的字段集以防止重复的ID并且无障碍地工作。
我相信我做错了什么,但是我一直在用这种方式撞我的头撞墙了两天,试图找到没有任何运气的东西,所以任何帮助都会超过赞赏!
在此先感谢!
辉煌,像魅力一样工作!这就是我脑子里想的,但一路卡住了。谢谢,非常感谢。 – 2009-12-13 01:22:08
也许这是常识,但我发现如果在更改字段集计数之前克隆的字段集的输入字段中输入了数据,输入的数据也将被克隆。做一个简单的clone.find(“input”)。each(function(){jQuery(this).val(“”)));克隆创建完成后会为您提供一个干净的克隆。希望这可以让一些人省掉几分钟的时间。 – 2009-12-13 21:53:56
嗯,这或多或少是常识,也是'clone'应该工作的方式。 jQuery'clone'方法在内部使用普通的DOM方法'cloneNode(true)'。点击这里查看它的行为描述http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-3A0ED0A4 – jitter 2009-12-13 22:42:08