2012-06-05 40 views
0

我完全不熟悉JavaScript。
我在頁面上有尺寸和顏色的下拉框供用戶訂購產品,但只有某些組合可用,即粉色是大尺寸的唯一顏色。
我想我會做一個允許的大小數組,並測試用戶對這些輸入。 如果選擇無效,那麼我想要一個彈出窗口來告訴用戶爲什麼。驗證2個下拉列表(僅限某些組合有效)

在現實世界中,我將使用SQL & PHP創建允許選擇的數組,在下面的示例中,我硬編碼了3個用於測試的有效選項。不幸的是,下面的代碼不會做任何事情。
我相信這是一個簡單的newb錯誤。我真的不知道我在做什麼:)
有人可以幫我嗎?

驗證功能應該是當用戶點擊提交表格發生......

<form id="form1" name="form1" method="post" onsubmit="return validate_form()" 
     action="cart.php"> 

這裏的功能:

<script type="text/javascript"> 
function validate_form() { 
    var allowed = new Array(); 
     allowed[0]="10,beige";  
     allowed[1]="10,black"; 
     allowed[2]="10,pink"; 

    var chosenColInd = document.getElementById("colID"); 
    var chosenColText = colID.options[colID.selectedIndex].text; 
    var chosenSizeInd = document.getElementById("sizeID"); 
    var chosenSizeText = sizeID.options[sizeID.selectedIndex].text; 
    var chosenSizeCol = chosenSizeText+","+chosenColText; 
    var found = "false"; 

    for (var i = 0; i < allowed.length; i++) { 
     if (allowed[i]=chosenSizeCol) { 
      found = "true"; 
     } 
    } 
    if (found = "false") { 
     alert('The variation you have selected is currently unavailable. Please select another.'); 
     return false; 
    } else { 
     return true; 
    } 
} 
</script> 

回答

0

有在您使用賦值運算符的幾行(即單個等於=)而不是其中一個相等運算符(即double或triple等於,triple通常在JavaScript中首選)。例如:

if (found = "false") { 

似乎是一見鍾情的問題 - 這是一個分配不是一個比較:)使用三聯等於===,而不是單:

if(found === "false") { 

另外,還要考慮以下(評論)更新代碼,這反映了更多典型的JavaScript代碼風格:

function validate_form() { 

    //no need to use new Array(), use array literal instead 
    var allowed = [ 
     "10,beige",  
     "10,black", 
     "10,pink" 
    ]; 

    var chosenColInd = document.getElementById("colID"); 
    var chosenColText = colID.options[colID.selectedIndex].text; 
    var chosenSizeInd = document.getElementById("sizeID"); 
    var chosenSizeText = sizeID.options[sizeID.selectedIndex].text; 
    var chosenSizeCol = chosenColText+","+chosenSizeText; 
    var found = "false"; 


    for (var i = 0; i < allowed.length; i++) { 

     //use equality operator instead of assignment 
     if (allowed[i]===chosenSizeCol) { 
      found = true; //may as well use a boolean rather than string 
      break; //exit loop early, no need to continue if we've already found 
     } 
    } 
    if (!found) { //no need to do a comparison with already boolean values 
     alert('The variation you have selected is currently unavailable. Please select another.'); 
    } 
    //may as well just return found here now that we're using a boolean 
    return found; 
} 
+0

非常感謝您的幫助。您的意見非常好,非常合理。不幸的是,我無法讓你的代碼也能工作。這裏有一個鏈接到測試頁面,如果有幫助的話:http://archers.net.au/onlineStore/test.php –

+0

我看到你正在使用變量'colID'在它被聲明在上面的腳本中的任何地方,我假設這是故意的,但如果你仍然有問題,這可能是原因。你是否熟悉像螢火蟲這樣的網頁開發工具?如果您需要進一步的幫助,請創建一個帶有HTML和腳本的[JsFiddle](http://jsfiddle.net),所以我不做進一步的假設 – WickyNilliams

+0

再次感謝。就我所知w3schools而言,ColID只是下拉ID(