当我尝试使用jQuery将一些HTML插入到DIV元素中时,我得到了NaN

Ank*_*kur 10 javascript jquery nan

当点击类numObj的元素时,我想显示一个文本框.出于某种原因,我得到了NaNNaNaNaNNaNNaNaNaN,我希望在下面的代码中看到searchForm变量的结果.

我知道NaN代表的不是数字.我不明白为什么Javascript期待一个数字?我无法理解它为何如此关心.

$(".numObj").live('click',function(){
   var preId = $(this).attr('preId');
   var arrayPos = $(this).attr('numArrayPos');

        alert(preId +" "+arrayPos);

        var searchForm = "<table border='0' cellspacing='0' cellpadding='4' id='add-tag2'>"+
          +"<tr class='normal'><td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'><span class='normal-small'>"+
          +"<input name='predicate-name2' type='text' class='normal' id='predicate-name2' size='4' />"+
          +"</span></td>"+
          +"<td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'><span class='normal-small'>&lt;=</span></td>"+
          +"<td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'>x</td>"+
          +"<td valign='bottom' bgcolor='#EEEEEE'>&lt;=</td>"+
          +"<td valign='bottom' bgcolor='#EEEEEE'><span class='normal-small'>"+
          +"<input type='text' name='object-object2' id='object-object2' class='normal' size='4' />"+
          +"</span></td>"+
          +"</tr>"+
          +"</table>";
        $(".numObj").filter("[preId='"+preId+"']").filter("[numArrayPos='"+arrayPos+"']").html(searchForm);

    }); 
Run Code Online (Sandbox Code Playgroud)

生成的numObj类代码看起来像这样

<td><div class="numObj" preid="73" numarraypos="5"><span class="normal">585.0</span></div></td>
Run Code Online (Sandbox Code Playgroud)

And*_*y E 18

正如其他人所指出的那样,问题在于+运营商.除了连接字符串之外,它还用作数学加法.由于Javascript的动态类型,+在字符串上单独使用一元将导致字符串转换为数字:

+"12"; // -> 12
+"10" + +"12" // -> 22
Run Code Online (Sandbox Code Playgroud)

您的代码的几+行将操作符放在行的末尾和新行的开头.第二个+将被视为一元数学加法,并将尝试将字符串转换为数字.考虑以下:

"Hello" +
+ "World" // -> "HelloNaN" 
Run Code Online (Sandbox Code Playgroud)

  • 谢谢安迪 - 我选择你的答案是因为它提供了关于 NaN 错误的更多信息。 (2认同)

Gle*_*ord 10

您有多个加号运算符彼此相邻.

var searchForm = "<table border='0' cellspacing='0' cellpadding='4' id='add-tag2'>"+
+"<tr class='normal'><td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'><span class='normal-small'>"+
Run Code Online (Sandbox Code Playgroud)

请注意,第一行末尾有一个加号运算符,最后一行开头有一个加号运算符.删除其中一个加号运算符(对于每一行),你可能会摆脱错误.

顺便说一句,JSLint一瞬间发现了这些错误.