Я создаю строку HTML в jQuery для добавления к таблице в HTML и хочу фиксировать, когда изменяется входное значение. Я пытаюсь передать переменную obj.attNewChum в атрибут onchange следующим образом:
contents = contents + "<input type='text' id='" + obj.cdId + "' name='" + obj.cdId + "' value='" + attMeeting + "' onchange='attendanceUpdateFunction(this.id, this.value, "+obj.attNewChum+")'>";
Однако это дает следующую ошибку в консоли:
Uncaught ReferenceError: N is not defined
at HTMLInputElement.onchange (Attendance.html:1)
attendanceUpdateFunction(this.id, this.value, N)
Переменная obj.attNewChum действительно содержит значение N.
Я пробовал заключить переменную в кавычки:
contents = contents + "<input type='text' id='" + obj.cdId + "' name='" + obj.cdId + "' value='" + attMeeting + "' onchange='attendanceUpdateFunction(this.id, this.value, "+"\"'obj.attNewChum'\""+")'>";
И это дает следующую ошибку в консоли:
Uncaught SyntaxError: Invalid or unexpected token
преобразовать двойные кавычки в одинарные и одинарные в двойные



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Лучшей альтернативой было бы правильно подключить слушателя, используя вместо этого Javascript, без использования встроенных обработчиков, чтобы вам не пришлось решать какие-либо проблемы с экранированием:
const input = $("<input>")
.prop({
id: obj.cdId,
name: obj.cdId,
value: attMeeting
});
input.on('change', function() {
attendanceUpdateFunction(this.id, this.value, obj.attNewChum);
});
Обратите внимание, что это приводит к тому, что input является объектом jQuery, а не строкой, поэтому вместо того, чтобы объединять новый HTML, вы захотите .append новый элемент.
Если случайно вы просто используете id, чтобы попытаться передать obj.cdId в attendanceUpdateFunction, вы можете рассмотреть возможность полного удаления id и просто использовать простую ссылку на cdId:
const input = $("<input>")
.prop({
name: obj.cdId,
value: attMeeting
});
input.on('change', () => {
attendanceUpdateFunction(obj.cdId, input.val(), obj.attNewChum);
});
Используйте следующим образом
contents = contents +'<input type = "text" id = "'+obj.cdId+'" name = "'+obj.cdId+'" value = "'+attMeeting+'" onchange = "attendanceUpdateFunction(this.id, this.value, \''+obj.attNewChum+'\'")">';
Небольшая поправка в конце: contents = contents + '<input type = "text" id = "' + obj.cdId + '" name = "' + obj.cdId + '" value = "' + attMeeting + '" onchange = " посещаемостьUpdateFunction (this.id, this.value, \ '' + obj.attNewChum + '\') "> '; Спасибо :-)
console.info(obj);может дать вам представление о том, что происходит на самом деле. (Также следует добавить к вашему вопросу, чтобы знать, о чем мы говорим.)