2009-10-08 63 views
0

我有一個訂單表單,我可以通過點擊一個按鈕追加字段。我有一些後端JavaScript運行,總計訂單價格,但總的腳本是逃避我。javascript - 搜索多個html #ID並傳遞到函數

我的問題是,我需要腳本來搜索整個DOM,並找到有多少人有一個ID匹配以下模式。

totprice01 totprice02 totprice03 totprice(N)

我一直在玩這個表達式,但不是很多的運氣恐怕:

matchStr = new RegExp("\\btotprice\\d{2}\\b", "gi"); 

一旦我獲得了我需要的所有HTML ID數組,以便將它們傳遞到一個至今看起來像這樣的函數 - 注意它全部是硬編碼的,而不是動態的:

document.getElementById('totpricetot').value = Math.round((parseFloat(document.getElementById('totprice1').value)+parseFloat(document.getElementById('totprice2').value)+parseFloat(document.getElementById('totprice3').value)+parseFloat(document.getElementById('totprice4').value)+parseFloat(document.getElementById('totprice5').value)+parseFloat(document.getElementById('totprice6').value)+parseFloat(document.getElementById('totprice7').value)+parseFloat(document.getElementById('totprice8').value)+parseFloat(document.getElementById('totprice9').value)+parseFloat(document.getElementById('totprice10').value))*100)/100; 

是否有人能夠幫助我把這個表達式+函數返回所有值的總和?

非常感謝!

編輯

OK,我決定使用純醇」 javascript來溝只是 - JQuery的啊!我使用下面的一些示例將這些代碼放在一起,但是有人可以幫助我調試它嗎?我一直從調試器中獲取「未定義」的錯誤 - 看起來這個函數對於DOM的其餘部分是不可用的嗎?

<input id="totprice08" onChange="totChange()" class="total_field" /> 
<input id="totprice09" onChange="totChange()" class="total_field" /> 
<input id="totprice10" onChange="totChange()" class="total_field" /> 
etc... 
<input id="totpricetot" value="0.00" name="totpricetot" /> 

jQuery(function($) { 
    function totChange() { 
    var sum=0; 
    $('.total_field').each(function() { 
     sum += $(this).val() * 1; 
    }); 
    $('#totpricetot').val(sum); 
    } 
}); 
+1

有沒有必要把這個函數jQuery的現成的函數中。這就是爲什麼你不能訪問它 – peirix 2009-10-08 14:10:55

+0

啊,你在開玩笑吧!就是這樣?現在所有的工作 - 非常感謝:) – MrFidge 2009-10-08 14:29:49

回答

1

使用jQuery,您可以選擇和總結這樣的元素:

var sum = 0; 
$('[id^=totprice-]').each(function() 
{ 
    sum += $(this).val(); 
}); 
+0

我喜歡這個 - 你能看看我上面的編輯並幫我調試嗎?謝謝:) – MrFidge 2009-10-08 14:02:23

0

你可以給你所有的總價元素相同的CSS類,然後得到這個類的所有元素(好和易於使用jQuery)。

-1

給每個元素一個類並使用jQuery。

+0

爲什麼這個答案downvoted? – erikkallen 2009-10-08 15:26:50

1

給你需要總結一類,然後獲得由類名(jQuery的或其他一些框架,將這些輸入的輸入在這裏派上用場)。

,如果你會使用jQuery你可以做這樣的事情:

function calculateSum() { 
    var sum = 0; 
    $('.YourClass').each (function() { 
     sum += $(this).val() * 1; 
    }); 

    return sum; 
} 
+0

我喜歡這個 - 你可以看看我編輯上面,並幫我調試?謝謝:) – MrFidge 2009-10-08 14:01:51

2

有很多解決方案。除了給所有相關的元素提供相同的類名並使用jQuery(或類似的東西)外,還可以簡單地記住一些JavaScript變量中元素的總數。可能嗎?我知道 - 這是一種老派的解決方案。你還沒有表明你正在使用jQuery或任何其他JavaScript庫,所以它可能更適合你。

編輯:只是爲了更加明確:

// your variable, updated every time you add/remove a new field 
var fieldsCount; 

// whenever you need to do anything with all the fields: 
for (var i = 0; i < fieldsCount; i++) 
{ 
    var field = document.getElementById("totprice" + i); 
    // ... 
}  
+0

nitpicking,但他的ID是兩位數,所以可能需要檢查值,如果它小於10,則需要填寫'i'。並且我喜歡'fieldsCount'的想法.. +1 – peirix 2009-10-08 12:06:29

+0

正確。我默默地認爲,因爲他們顯然也動態創建,編號可以簡單地改變:-) – 2009-10-08 12:07:44

+0

謝謝,我認爲最初我正在尋找一個純粹的JS解決方案,但我一直在網站上的其他地方使用jQuery,所以它使感覺也包括在這裏。 – MrFidge 2009-10-08 14:00:44

3

我喜歡它因此利用,回答每一個問題的JavaScript如何 「使用jQuery」 ......

反正...你可以只用純醇」了Javascript,做到這一點:

var inputs = document.getElementsByTagName("input"); 
var priceInputs = []; 
for (var i=0, len=inputs.length; i<len; i++) { 
    if (inputs[i].tagName.indexOf("totprice") > -1) { 
     priceInputs[priceInputs.length] = parseInt(inputs[i].value); 
    } 
} 
calcTotal(priceInputs); 

然後,只需通過陣列創建循環播放功能,並總結(:

+0

來吧...如果你倒票,留下評論告訴我爲什麼... – peirix 2009-10-08 12:13:47

+0

我不能同意更多的「使用jQuery」到處。 – 2009-10-08 12:29:49

+0

公平起來很有用!但是,是的,你應該得到一個明智的答案+1! – MrFidge 2009-10-08 14:01:19