关于另一个问题,我有一个工作脚本来创建动态表单字段:FIDDLE
我想我会弄明白其余部分,但我不明白为什么当我尝试为name
分配新的ID
和textarea
属性时,它会给我{{ 1}}。
如果我这样做:
NAN
设置好,但是如果我尝试做的话:
i++;
var newname = jQuery(prevDiv).attr('name');
prevDiv.find('textarea').attr('name',i );
..这就是我需要的 - 我得到prevDiv.find('textarea').attr('name',newname +i );
。
我知道我的JS质量非常接近零,但我的语法错了吗?
答案 0 :(得分:3)
name
元素中没有jQuery(prevDiv)
个attr。 name
属性实际上位于文本字段中。
您的代码应如下所示:
var newname = jQuery(prevDiv).find("textarea").attr('name');
prevDiv.find('textarea').attr('name',newname + i );
更新了小提琴:http://jsfiddle.net/Ny5Y7/
答案 1 :(得分:2)
如果要实际对两个值求和:newname是字符串而不是数字。您必须先将变量强制转换为数字,然后再执行+ i。所以这样做:
prevDiv.find('textarea').attr('name',parseInt(newname, 10) +i );
如果要连接它们,请使用额外的'':
prevDiv.find('textarea').attr('name',newname + '' + i );
答案 2 :(得分:2)
在您提供的第一个代码段中,应修改第二行以获取prevDiv中存在的textarea元素的 name 属性,如下所示。
var newname = jQuery(prevDiv).find('textarea').attr('name');
prevDiv.find('textarea').attr('name',newname + i );
在您的代码段中,您尝试读取prevDiv元素的name属性,该属性没有任何值。 (所以返回undefined)
这就是为什么在添加带有正确数字的undefined时会得到NAN(非数字)。
答案 3 :(得分:1)
您没有使用错误的语法。只需在那里强制执行一个字符串:
prevDiv.find('textarea').attr('name',newname + ' ' + i );
sum操作抛出NonANumber
或NaN
错误,因为它试图执行算术加法,而不是字符串连接。
var i = 5; // typeof i = number;
var x = i + ""; // typeof x = string;
// or
var y = new String(i);// slower than doing the above.