Я получаю NaN, когда я пытаюсь вставить некоторый HTML в элемент DIV с jQuery

Я - Тринг для отображения текстового поля, когда элемент класса 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);

    }); 

Сгенерированный код, который имеет numObj класс, выглядит примерно так

<td><div class="numObj" preid="73" numarraypos="5"><span class="normal">585.0</span></div></td>
10
задан Ankur 27 May 2010 в 10:41
поделиться

4 ответа

Проблема, как указывали другие, заключается в операторе + . Помимо объединения строк, он также используется как математическое сложение. Из-за динамической типизации Javascript использование одного унарного + в строке приведет к преобразованию строки в число:

+"12"; // -> 12
+"10" + +"12" // -> 22

В нескольких строках вашего кода есть оператор + в конец строки и начало новой строки . Второй + будет рассматриваться как унарное математическое сложение и попытается преобразовать строку в число . Примите во внимание следующее:

"Hello" +
+ "World" // -> "HelloNaN" 
18
ответ дан 3 December 2019 в 14:43
поделиться

Создание всей переменной searchForm только в одной строке заставляет ее работать ... но это не изящно. Если есть какие-то лучшие решения, я хотел бы знать.

0
ответ дан 3 December 2019 в 14:43
поделиться

У вас есть несколько операторов плюса рядом друг с другом.

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'>"+

Обратите внимание, что в конце первой строки стоит оператор «плюс», а в начале последней - один. Удалите один из этих плюсовых операторов (для каждой строки), и вы, вероятно, избавитесь от ошибки.

Кстати, JSLint мгновенно обнаруживает эти ошибки.

10
ответ дан 3 December 2019 в 14:43
поделиться

Уберите символы + в конце каждой строки var searchForm

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>";
4
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: