2016-12-31 81 views
4

漂亮直直的前鋒問題。HTML/Javascript表單複選框值不顯示

當用戶點擊「添加」按鈕,勾選檢查,我想價值說在類=「家」,「吸菸者」。

當勾選不檢查,我想價值說「不吸菸」

目前,我的「如果其他」語句不點火。一直在尋找解決這個問題。誰能幫忙?

邊注意:沒有jQuery,無法編輯HTML。只有純Javascript。

HTML

<ol class="household"></ol> 
    <form> 
     <div> 
      <label>Age 
       <input type="text" name="age"> 
      </label> 
     </div> 
     <div> 
      <label>Relationship 
       <select name="rel"> 
        <option value="">---</option> 
        <option value="self">Self</option> 
        <option value="spouse">Spouse</option> 
        <option value="child">Child</option> 
        <option value="parent">Parent</option> 
        <option value="grandparent">Grandparent</option> 
        <option value="other">Other</option> 
       </select> 
      </label> 
     </div> 
     <div> 
      <label>Smoker? 
       <input type="checkbox" name="smoker"> 
      </label> 
     </div> 
     <div> 
      <button class="add">add</button> 
     </div> 
     <div> 
      <button type="submit">submit</button> 
     </div> 
    </form> 

JS

function validate(form) { 

     fail = validateAge(form.age.value) 
     fail += validateRel(form.rel.value) 

     if (fail == "") return true 
     else { 
      alert(fail); 
      return false 
     } 
    } 

    function validateAge(field) { 
     if (isNaN(field)) return "No age was entered. \n" 
     else if (field < 1 || field > 200) 
      return "Age must be greater than 0. \n" 
     return "" 
    } 

    function validateRel(field) { 
     if (field == "") return "Please select a relationship \n" 
     return "" 

    } 


    document.querySelector("form").onsubmit = function() { 
     return validate(this) 

    } 



    document.querySelector(".add").onclick = function(event) { 
     event.preventDefault(); 
     createinput() 


    } 


    count = 0; 

    function createinput() { 
     field_area = document.querySelector('.household') 
     var li = document.createElement("li"); 
     var p1 = document.createElement("p"); 
     var p2 = document.createElement("p"); 
     var p3 = document.createElement("p"); 
     var x = document.getElementsByName("age")[0].value; 
     var y = document.getElementsByName("rel")[0].value; 
     var z = document.getElementsByName("smoker")[0].value.checked; 


     if(z === undefined) { 
      return ("Non smoker \n") 

     } 
     else { 
      return ("Smoker \n") 

     } 


     p1.innerHTML = x; 
     p2.innerHTML = y; 
     p3.innerHTML = z; 
     li.appendChild(p1); 
     li.appendChild(p2); 
     li.appendChild(p3); 
     field_area.appendChild(li); 
     //removal link 
     var removalLink = document.createElement('a'); 
     removalLink.onclick = function() { 
      this.parentNode.parentNode.removeChild(this.parentNode) 
     } 
     var removalText = document.createTextNode('Remove Field'); 
     removalLink.appendChild(removalText); 
     li.appendChild(removalLink); 
     count++ 
    } 

回答

5

第一個問題是你沒有得到的複選框狀態正確的方式。它應該是document.getElementsByName("smoker")[0].checked而不是document.getElementsByName("smoker")[0].value.checked

第二個問題是您在if else中使用return。如果您使用return則該功能的以下代碼將不會執行。

變化

var z = document.getElementsByName("smoker")[0].value.checked; 

if(z === undefined) { 
    return ("Non smoker \n") 
} 
else { 
    return ("Smoker \n") 
} 

var z = document.getElementsByName("smoker")[0].checked; 

if (!z) { 
    z = "Non smoker \n"; 
} else { 
    z = "Smoker \n"; 
} 
2

因爲你有你可以添加以下處理程序只有一個 「家庭」 元素:

document.querySelectorAll('[name="smoker"]')[0].onclick = function() { 
document.getElementsByClassName('household')[0].textContent = 
        this.checked ? 'Smoker' : 'Non-smoker'; 

}

的例子:

function validate(form) { 
 

 
    fail = validateAge(form.age.value) 
 
    fail += validateRel(form.rel.value) 
 

 
    if (fail == "") return true 
 
    else { 
 
    alert(fail); 
 
    return false 
 
    } 
 
} 
 

 
function validateAge(field) { 
 
    if (isNaN(field)) return "No age was entered. \n" 
 
    else if (field < 1 || field > 200) 
 
    return "Age must be greater than 0. \n" 
 
    return "" 
 
} 
 

 
function validateRel(field) { 
 
    if (field == "") return "Please select a relationship \n" 
 
    return "" 
 

 
} 
 

 

 
count = 0; 
 

 
function createinput() { 
 
    field_area = document.querySelector('.household') 
 
    var li = document.createElement("li"); 
 
    var p1 = document.createElement("p"); 
 
    var p2 = document.createElement("p"); 
 
    var p3 = document.createElement("p"); 
 
    var x = document.getElementsByName("age")[0].value; 
 
    var y = document.getElementsByName("rel")[0].value; 
 
    var z = document.getElementsByName("smoker")[0].checked; 
 

 

 
    if(!z) { 
 
    z = "Non smoker"; 
 

 
    } 
 
    else { 
 
    z = "Smoker"; 
 

 
    } 
 

 

 
    p1.innerHTML = x; 
 
    p2.innerHTML = y; 
 
    p3.innerHTML = z; 
 
    li.appendChild(p1); 
 
    li.appendChild(p2); 
 
    li.appendChild(p3); 
 
    field_area.appendChild(li); 
 
    //removal link 
 
    var removalLink = document.createElement('a'); 
 
    removalLink.onclick = function() { 
 
    this.parentNode.parentNode.removeChild(this.parentNode) 
 
    } 
 
    var removalText = document.createTextNode('Remove Field'); 
 
    removalLink.appendChild(removalText); 
 
    li.appendChild(removalLink); 
 
    count++ 
 
} 
 

 
document.querySelector("form").onsubmit = function() { 
 
    return validate(this) 
 

 
} 
 

 

 

 
document.querySelector(".add").onclick = function(event) { 
 
    event.preventDefault(); 
 
    createinput() 
 

 

 
} 
 

 
document.querySelectorAll('[name="smoker"]')[0].onclick = function() { 
 
    document.getElementsByClassName('household')[0].textContent = this.checked ? 'Smoker' : 'Non-smoker' 
 
}
<ol class="household"></ol> 
 
<form> 
 
    <div> 
 
     <label>Age 
 
      <input type="text" name="age"> 
 
     </label> 
 
    </div> 
 
    <div> 
 
     <label>Relationship 
 
      <select name="rel"> 
 
       <option value="">---</option> 
 
       <option value="self">Self</option> 
 
       <option value="spouse">Spouse</option> 
 
       <option value="child">Child</option> 
 
       <option value="parent">Parent</option> 
 
       <option value="grandparent">Grandparent</option> 
 
       <option value="other">Other</option> 
 
      </select> 
 
     </label> 
 
    </div> 
 
    <div> 
 
     <label>Smoker? 
 
      <input type="checkbox" name="smoker"> 
 
     </label> 
 
    </div> 
 
    <div> 
 
     <button class="add">add</button> 
 
    </div> 
 
    <div> 
 
     <button type="submit">submit</button> 
 
    </div> 
 
</form>

+0

哎@gaetanoM未正常工作。該值仍然表示「未定義」,這就是爲什麼我放置「if/else」語句。 「if/else」語句沒有錯嗎? – spidey677

+0

@ spidey677對不起,只是現在我修復了未定義的錯誤。你的if是錯誤的,因爲你需要選擇「document.getElementsByName(」smoker「)[0] .checked」。 – gaetanoM