0

在另一个问题之后,我有一个工作脚本来创建动态表单字段:FIDDLE

我以为我会弄清楚其余的,但我不明白为什么当我尝试为 分配新的nameID属性时textarea,它给了我NAN.

如果我做 :

i++;
 var newname = jQuery(prevDiv).attr('name');    
prevDiv.find('textarea').attr('name',i );

它设置好,但如果我尝试这样做:

prevDiv.find('textarea').attr('name',newname +i );

..这是我需要的 - 我得到了NAN

我知道我的 JS 质量非常接近于零,但我的语法错了吗?

4

4 回答 4

3

您的元素中没有nameattr 。jQuery(prevDiv)name属性实际上在文本字段上。

您的代码应如下所示:

    var newname = jQuery(prevDiv).find("textarea").attr('name');
    prevDiv.find('textarea').attr('name',newname + i ); 

更新小提琴:http: //jsfiddle.net/Ny5Y7/

于 2013-05-04T12:29:17.487 回答
2

如果您想实际将两个值相加:newname 是一个字符串而不是一个数字。您必须先将变量转换为数字,然后执行 + i。所以这样做:

 prevDiv.find('textarea').attr('name',parseInt(newname, 10) +i );

如果要连接它们,请使用额外的'':

prevDiv.find('textarea').attr('name',newname + '' + i );
于 2013-05-04T12:25:35.480 回答
2

在您提供的第一个代码段中,应修改第二行以获取prevDiv 中存在的 textarea 元素的name属性,如下所示。

var newname = jQuery(prevDiv).find('textarea').attr('name');
prevDiv.find('textarea').attr('name',newname + i ); 

在您的代码片段中,您正在尝试读取没有任何值的 prevDiv 元素的 name 属性。(所以返回未定义)

这就是原因,当添加一个带有适当数字的 undefined 时,你会得到一个 NAN(不是数字)。

于 2013-05-04T12:44:41.860 回答
1

您没有使用错误的语法。只需在那里强制一个字符串:

prevDiv.find('textarea').attr('name',newname + ' ' + i );

sum 操作抛出一个NonANumberorNaN错误,因为它试图执行算术加法,而不是字符串连接。

var i = 5; // typeof i = number;
var x = i + ""; // typeof x = string;
// or
var y = new String(i);// slower than doing the above.
于 2013-05-04T12:25:48.583 回答