2013-04-02 29 views
0

在下面的函數中,我找到了一個ID的最大數量,然後加上了1.除了添加到DOM的新值沒有被看到,一切都有效,因此它們不是在第二次調用該函數時遞增。從DOM中獲取.append值

我是不是正確添加新的值到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

似乎是正確的......你調用'$(文件)。就緒(函數(){//代碼在這裏}'塊 – tymeJV

+0

VAR裏面這個功能呢? 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 - 謝謝!只是試了一下,它看起來很完美。如果您將此添加爲答案,我會接受。 –