Я - Тринг для отображения текстового поля, когда элемент класса 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'><=</span></td>"+
+"<td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'>x</td>"+
+"<td valign='bottom' bgcolor='#EEEEEE'><=</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>
Проблема, как указывали другие, заключается в операторе +
. Помимо объединения строк, он также используется как математическое сложение. Из-за динамической типизации Javascript использование одного унарного +
в строке приведет к преобразованию строки в число:
+"12"; // -> 12
+"10" + +"12" // -> 22
В нескольких строках вашего кода есть оператор +
в конец строки и начало новой строки . Второй +
будет рассматриваться как унарное математическое сложение и попытается преобразовать строку в число . Примите во внимание следующее:
"Hello" +
+ "World" // -> "HelloNaN"
Создание всей переменной 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'>"+
Обратите внимание, что в конце первой строки стоит оператор «плюс», а в начале последней - один. Удалите один из этих плюсовых операторов (для каждой строки), и вы, вероятно, избавитесь от ошибки.
Кстати, JSLint мгновенно обнаруживает эти ошибки.
Уберите символы + в конце каждой строки 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'><=</span></td>"
+"<td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'>x</td>"
+"<td valign='bottom' bgcolor='#EEEEEE'><=</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>";