我想設置一個小文章選擇器。雖然它適用於Firefox和Chrome以及IE7,但它在IE8和IE9上存在問題。Javascript在NaN中顯示錯誤的表單字段在IE中 - 在Firefox和Chrome中工作
- 在IE 8和9中,點擊時會將「增加」字段更改爲「
NaN
」。 (編輯:將信函在號碼前解決) - 在IE9中會更新「Warenkorb」,但地方「
NaN
」或
領域「\/
」爲「Anzahl」。 (編輯:通過在數字前面放置一個字母來解決) - 在IE8中它完全忽略了更新函數。 (編輯:與innerHTML-Bug有關)
對我來說,似乎我無法達到窗體本身。我已經嘗試使用document.forms[0]
和document.getElementById["bestmult"]
來代替,以防交付的對象不是表單中的字段,但這並沒有改變任何內容。 我覺得這個解決方案非常簡單,但我不能把它放在手指上。
下面是代碼:
<script>
var sumarray = new Array();
var artarray = new Array();
var costarray = new Array();
var counter=0;
function increase(obj, field, type){
var form = obj.form;
var value = parseInt(form.elements[field].value, 10);
value++;
form.elements[field].value = value;
updateCosts(obj, field, type);
}
function decrease(obj, field, type){
var form = obj.form;
var value = parseInt(form.elements[field].value, 10);
if(value > 0){
value--;
form.elements[field].value = value;
updateCosts(obj, field, type);
}
}
function updateCosts(obj, field, type){
var form = obj.form;
var exist = artarray.indexOf(form.elements[field].name);
var preis = 0;
if (type == 'b'){
preis = 19.95;
}else if (type == 'p') {
preis = 29.95;
}
if (exist != -1){
if (form.elements[field].value == 0){
sumarray.splice(exist , 1);
artarray.splice(exist , 1);
costarray.splice(exist , 1);
counter--;
}else {
sumarray[exist] = form.elements[field].value;
artarray[exist] = form.elements[field].name;
costarray[exist] = preis;
}
}else {
sumarray[counter] = form.elements[field].value;
artarray[counter] = form.elements[field].name;
costarray[counter] = preis;
counter++;
}
var completestring = "";
if (counter > 0) {
var product = 0;
completestring += "<h1>Warenkorb</h1><table border=0><tr style='background:gray;' align='center'><td width=110 align='center'>Artikel</td><td width=80>Anzahl</td><td align='center' width=60>Preis</td><td align='center' width='40'>Del</td></tr>";
for(var i=0;i<counter;i++){
completestring += "<tr><td>"+artarray[i].replace("_", " ")+"</td><td align=center>"+sumarray[i]+"</td><td align=center>"+costarray[i]+"</td><td align=center><img src='img/trash.png' onclick='setZero(\""+artarray[i]+"\")'></td></tr>";
product += parseInt(sumarray[i])*parseInt(costarray[i]);
}
completestring += "</table><h2>"+(product).toFixed(2)+"</h2>";
} else {
completestring += "<h1>Warenkorb</h1>";
}
document.getElementById("sum").innerHTML = completestring;
}
function setZero(element) {
var form = document.forms[0];
form.elements[element].value = "0";
var obj = form.elements[element];
updateCosts(obj, element, "b");
}
</script>
<div id="sum">
</div>
<form id="bestmult" action="test2.html" method="post">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td rowspan="2"><input type="text" name="1_Basis" value="0" onblur="updateCosts(this, '1_Basis', 'b')" /></td>
<td><input type="button" value=" /\ " onclick="increase(this, '1_Basis', 'b')" class="button" ></td>
</tr><tr>
<td><input type="button" value=" \/ " onclick="decrease(this, '1_Basis', 'b')" class="button" ></td>
</tr>
</table>
此代碼是事業不是一切有(雖然這可能會影響眼前的一切問題),所以不要用腳本打擾標籤,或不完整的表格,這些地方只是添加完成,展現這一切是如何結合在一起,而無需張貼整個代碼。
編輯:看來,IE8和9與我通過文本框命名方式有問題。我可以通過簡單地在開始處放置一個z來解決大部分問題,以後我可以簡單地剝離以恢復正確的文本。現在只是IE8似乎並不喜歡innerHTML。我在互聯網上發現了很多,但沒有任何真正的工作。
感謝您的快速回答,但'indexOf()'也是Array的一個函數。雖然你的解決方案可能會解決一些問題 – HolgerS 2013-04-29 09:37:33
快速回答:-) ..我不認爲這很快...我在這裏檢查我ie8。因爲ie 8 indexOf會給出錯誤。請看這個鏈接http://stackoverflow.com/questions/3629183/why-doesnt-indexof-work-on-an-array-ie8 – 999k 2013-04-29 09:44:26
啊,是的,那就是它 – HolgerS 2013-04-29 10:14:32