2013-04-02 4 views
0

В приведенной ниже функции я нахожу максимальное количество идентификаторов, а затем добавляю 1. Все работает, за исключением того, что новые значения, добавляемые в DOM, не видны, поэтому они не являются увеличивается при вызове функции второй раз.Получение значений .append из DOM

Я не добавляю новые значения в DOM правильно?

function addEdu(){ 
    var currentCount = $('input.uniqueId').val(); 
    currentCount = Math.max(currentCount); 
    var nextCount = parseInt(currentCount) + 1; 
    var newEdu = "<input type='hidden' name='fieldId[]' value='" + nextCount + "' class='uniqueId' /><p class='dual'><input type='text' name='educationTitle[]' "; //Shortened for clarity 
    $("#eduHistory").append(newEdu); 
    $(".datepicker").datepicker(); 
} 
+0

кажется правильным ... вы называете эту функцию внутри '$ (документ) .ready (функция() {// здесь код}' блок – tymeJV

+0

вар? currentCount = $ ('input.uniqueId'). val(); вы должны делать это в операции .each(), потому что не знаете, какое значение вы пытаетесь получить. Или, может быть, вы хотите .size() вместо .val()? – rnirnber

+0

@rnirnber - конечно, вы имели в виду 'length', а не' size() '? – adeneo

ответ

1

Способ, которым вы пытаетесь определить следующий .uniqueId, неверен.
Прежде всего, $("input.uniqueId").val() даст вам значение первого элемента в выборе.
Вторая проблема заключается в Math.max(currentCount), которая всегда будет возвращать значение currentCount, которое, как уже упоминалось, является значением первого элемента.

Это должно работать как задумано:

// get an array with all uniqueIds 
var currentIds = $("input.uniqueId").map(function() { 
    return parseInt($(this).val(), 10); 
}); 

// determine the biggest uniqueId 
var currentCount = Math.max.apply(Math, currentIds); 

// next uniqueId (if there is no "input.uniqueId" then currentCount will be -Infinity) 
var nextCount = (currentCount === -Infinity ? 0 : currentCount) + 1; 

// ... 
2

$('input.uniqueId').val() даст вам значение первого входа с классом uniqueId. Если вы только ожидаете, что один такой вход просто изменит значение ввода. В противном случае вам, вероятно, придется выбрать последний вход $('input.uniqueId:last').val().

Также Math.max принимает 2 параметра, какова их цель?

+0

У меня будет неизвестное количество значений f или '$ ('input.uniqueId'). val()'. Я пытаюсь увеличить значение 'uniqueId' на 1 при создании. 'Math.max' - моя попытка получить максимальное значение' $ ('input.uniqueId'). Val() ' –

+0

@relentless' var ids = $ ("input.uniqueId"). Map (function() { return parseInt ($ (this) .val(), 10);}); var currentCount = Math.max.apply (Math, ids); ' – Andreas

+0

@Andreas - Спасибо! Просто попробовал, и похоже, что он отлично работает. Если вы добавите это как ответ, я соглашусь. –

Смежные вопросы