Вы были уже очень близко. Работающий JSFiddle .
Предполагая, что вложенные обработчики $(document).on('input', ...
являются просто опечаткой, вот как вы можете получить значение последнего ввода в строке со второй по последнюю строку ( последняя строка теперь является новым пустым клоном):
alert($("#dynamictable tr:last").prev().find("input:last").val());
Используя td
в качестве селектора, вы выбираете ячейки таблицы, но на самом деле это ввод, который вы ищете. И использование .html()
даст вам фактическое литеральное HTML содержимое ячеек таблицы, где вы действительно хотите ввести значение - которое вы получите с помощью .val()
.
Edit - некоторые предложения:
Ваш код смешивается jQuery с ванилью Javascript. Технически в этом нет ничего плохого, но с ним труднее читать и работать. Если у вас есть jQuery, вы можете использовать его.
Этот простой JS:
document.getElementById("dynamictable").rows.length
можно записать в jQuery как:
$('#dynamictable tr').length
Селектор jQuery соответствует всем строкам, а .length
сообщит нам, сколько совпадений мы получили.
Этот простой JS:
this.parentNode.parentNode.rowIndex
немного обманщик, но это jQuery работает:
$(this).closest('tr').index()
$(this)
в этом контексте относится к элементу input
, который получил ввод. closest('tr')
находит ближайшую родительскую строку, которая будет строкой, в которой находится ввод. И index()
, в этом формате, сообщит нам позицию (начиная с нуля) этого элемента среди его братьев и сестер.
Просто для удовольствия, вы также можете написать весь этот тест в виде:
if ($(this).closest('tr').is($("#dynamictable tr:last"))) {
Это просто проверяет, действительно ли строка с входными данными равна последней строка в таблице. Возможно, это немного более читабельно и понятно, чем в другой версии.
Далее, считается плохой практикой включать Javascript в строку с HTML, как обработчик onClick()
. Лучшим подходом является разделение их и добавление обработчика событий в JS, например, что-то вроде:
$('form').on('submit', playland);
Также обратите внимание, что когда вы обрабатываете отправку формы с помощью JS, вы ( вероятно?) не хочет, чтобы стандартная форма HTML отправлялась. Чтобы остановить это, вам нужно использовать параметр event
, который автоматически передается любому обработчику событий, и остановить его - вы делаете это с помощью:
function playland(event){
event.preventDefault();
// ... rest of your code
Вот обновленный JSFiddle со всеми этими изменениями.