Я пытаюсь создать новый узел с уникальным идентификатором в Javascript. Для этого я создал кнопку
<input type="button" value="Add Field" onclick="AddField(this.parentElement);" />
И функция Javascript
AddField = function (ParentDom){
var uniqueValue = ParentDom.children.length;
var newNode = "<input id='InputName"+uniqueName+"' type='text' dir='ltr' autocomplete='on' class='form-field marge-top-20' placeholder='Name Eng' value='' oninput='SafeCopy(this, document.getElementById('inputName"+uniqueName+"')); return false;'>";
//here will be a code to add 'newNode' as last child to 'ParentDom'
}
но когда я отлаживаю код, я получаю это
newNode = <input id="InputName7" type="text" dir="ltr" autocomplete="on" class="form-field marge-top-20" placeholder="Name Eng" value="" oninput="SafeCopy(this, document.getElementById(" inputname7'));="" return="" false;'="">
Я не понимаю, почему
id="InputName7"
работает, но
document.getElementById(" inputname7'));="" return="" false;'=""
перепутался.
После многих ответов, которые предложили добавить обратную косую черту к одинарным кавычкам, я все равно перепутаю результат:
Код:
<input id=\'InputName" + uniqueName + "\' type='text' dir='ltr' autocomplete='on' class='form-field marge-top-20' placeholder='Name Eng' value='' oninput='SafeCopy(this, document.getElementById(\'inputName" + uniqueName + "\')); return false;'>
Результат:
"<input id="InputName7" type="text" dir="ltr" autocomplete="on" class="form-field marge-top-20" placeholder="Name Eng" value="" oninput="SafeCopy(this, document.getElementById(" inputname7'));="" return="" false;'="">"
Пожалуйста помоги!
Финал получил работу! В конце нет необходимости добавлять обратную косую черту! Что нужно сделать, так это удалить ВСЕ одинарные кавычки в одинарных кавычках, а код работает:
var newNode = "<input id='InputName"+uniqueName+"' type='text' dir='ltr' autocomplete='on' class='form-field marge-top-20' placeholder='Name Eng' value='' oninput=SafeCopy(this, document.getElementById('inputName"+uniqueName+"'))>";
И это работает!
Проблема была в этом коде:
'SafeCopy(this, document.getElementById('inputName"+uniqueName+"')); return false;'
как вы можете видеть, у меня есть одиночные кавычки внутри одинарных кавычек. После того, как я изменил его на:
SafeCopy(this, document.getElementById('inputName"+uniqueName+"'))
Он работал так, как должен!
Вам нужно поставить обратную косую черту перед вашими одиночными кавычками, или ваш код будет испорчен внутри вашего oninput
.
oninput='SafeCopy(this, document.getElementById(\'inputName"+uniqueName+"\')); return false;'
Ваши внутренние кавычки не экранированы. Вы должны добавить обратную косую черту перед одиночными кавычками в этой части:
document.getElementById('inputName"+uniqueName+"')
потому что они встречаются в части, которая уже цитируется одинарными кавычками. Так:
document.getElementById(\'inputName"+uniqueName+"\')
(Перед исправлением вашего вопроса у вас был <div class='block'>
, который игнорируется, потому что вы не закрываете тег.)
Также проверьте капитализацию inputName
. Вероятно, это должно быть InputName
. Но тогда все еще кажется странным, что вы хотите позвонить:
SafeCopy(this, document.getElementById(\'InputName"+uniqueName+"\')
... поскольку оба аргумента будут ссылаться на один и тот же элемент, т.е. на input
на котором было инициировано событие.
uniqueName
не определяется нигде, он должен быть уникальным.getElementById
. Это должно быть getElementById('InputName" + uniqueValue + "')
. Обратите внимание, что параметр чувствителен к регистру.