2012-08-03 191 views
17

我有一個有多個複選框的表單,我想使用JavaScript來確保至少有一個選中。這就是我現在所擁有的,但無論選擇什麼,都會彈出一個警報。確保至少有一個複選框被選中

JS(錯誤)

function valthis(){ 
if (document.FC.c1.checked) { 
    alert ("thank you for checking a checkbox") 
    } else { 
    alert ("please check a checkbox") 
    } 
} 

HTML

<p>Please select at least one Checkbox</p> 
<br> 
<br> 
<form name = "FC"> 
<input type = "checkbox" name = "c1" value = "c1"/> C1 
<br> 
<input type = "checkbox" name = "c1" value = "c2"/> C2 
<br> 
<input type = "checkbox" name = "c1" value = "c3"/> C3 
<br> 
<input type = "checkbox" name = "c1" value = "c4"/> C4 
<br> 
</form> 
<br> 
<br> 

<input type = "button" value = "Edit and Report" onClick = "valthisform();"> 

因此,我結束了在JS做的是這樣的:

function valthisform(){ 
var chkd = document.FC.c1.checked || document.FC.c2.checked||document.FC.c3.checked|| document.FC.c4.checked 

if (chkd == true){ 

} else { 
    alert ("please check a checkbox") 
} 

} 

我決定放棄「謝謝」部分以適應作業的其餘部分。非常感謝你,每一個建議真的幫了大忙。

+0

爲什麼在表單的「編輯和報告」按鈕*外部* – 2012-08-03 00:43:31

回答

20

如果您打算像document.FC.c1那樣引用它們,您應該避免使用兩個同名的複選框。如果您有多個名爲c1的複選框,瀏覽器將如何知道您指的是哪一個?

下面是一個非jQuery解決方案來檢查頁面上的任何複選框是否被選中。

var checkboxes = document.querySelectorAll('input[type="checkbox"]'); 
var checkedOne = Array.prototype.slice.call(checkboxes).some(x => x.checked); 

您需要Array.prototype.slice.call部分由document.querySelectorAll轉換返回NodeList到一個數組,你可以調用some

+0

謝謝,我一直在尋求避免JQuery,但你的第二個建議幫了很大忙。 – MegaSly 2012-08-03 03:43:40

+13

@Mash'你永遠不應該有兩個相同的元素名字「什麼?然後你怎麼寫迭代無線電? – Mageek 2012-08-09 04:27:04

+2

*「你應該避免有兩個同名的元素」* - 錯誤。使用重複的元素名稱是有效的,適用於所有瀏覽器,並且在提交表單後可以正常工作。正如馬吉克說的那樣,這是你創建廣播組的方式,但它也適用於其他表單元素。 – nnnnnn 2016-05-10 12:55:30

18

這應該工作:

function valthisform() 
{ 
    var checkboxs=document.getElementsByName("c1"); 
    var okay=false; 
    for(var i=0,l=checkboxs.length;i<l;i++) 
    { 
     if(checkboxs[i].checked) 
     { 
      okay=true; 
      break; 
     } 
    } 
    if(okay)alert("Thank you for checking a checkbox"); 
    else alert("Please check a checkbox"); 
} 

如果您有關於代碼的問題,只是發表評論。


我用l=checkboxs.length以提高性能。見http://www.erichynds.com/javascript/javascript-loop-performance-caching-the-length-property-of-an-array/

+0

謝謝。我正在尋找如何驗證複選框,這對我有效 – user1815823 2013-04-06 14:24:20

+0

我被迫遇到了這個問題,但是你的代碼解決了我的問題+1 – offboard 2013-10-05 19:12:10

+2

「okay = true」之後的一箇中斷會優化一點:P – 2015-06-03 09:41:48

2

Check this.

無法通過其名稱訪問的形式輸入。改用document.getElements方法。

1

使用jQuery,您可以防止用戶取消選中上次選中的複選框。

$('input[type="checkbox"][name="chkBx"]').on('change',function(){ 
 
    var getArrVal = $('input[type="checkbox"][name="chkBx"]:checked').map(function(){ 
 
    return this.value; 
 
    }).toArray(); 
 
    
 
    if(getArrVal.length){ 
 
    //execute the code 
 
    $('#cont').html(getArrVal.toString()); 
 
    
 
    } else { 
 
    $(this).prop("checked",true); 
 
    $('#cont').html("At least one value must be checked!"); 
 
    return false; 
 
    
 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<label> 
 
    <input type="checkbox" name="chkBx" value="value1" checked> Value1 
 
</label> 
 
<label> 
 
    <input type="checkbox" name="chkBx" value="value2"> Value2 
 
</label> 
 
<label> 
 
    <input type="checkbox" name="chkBx" value="value3"> Value3 
 
</label> 
 

 
<div id="cont"></div>

0
< script type = "text/javascript" src = "js/jquery-1.6.4.min.js" > </script > 
    < script type = "text/javascript" > 

function checkSelectedAtleastOne(clsName) { 
    if (selectedValue == "select") 
     return false; 

    var i = 0; 
    $("." + clsName).each(function() { 

     if ($(this).is(':checked')) { 
      i = 1; 
     } 

    }); 

    if (i == 0) { 
     alert("Please select atleast one users"); 
     return false; 
    } else if (i == 1) { 
     return true; 
    } 

    return true; 

} 

$(document).ready(function() { 
    $('#chkSearchAll').click(function() { 

     var checked = $(this).is(':checked'); 
     $('.clsChkSearch').each(function() { 
      var checkBox = $(this); 
      if (checked) { 
       checkBox.prop('checked', true); 
      } else { 
       checkBox.prop('checked', false); 
      } 
     }); 

    }); 

    //for select and deselect 'select all' check box when clicking individual check boxes 
    $(".clsChkSearch").click(function() { 

     var i = 0; 
     $(".clsChkSearch").each(function() { 

      if ($(this).is(':checked')) {} 
      else { 

       i = 1; //unchecked 
      } 

     }); 

     if (i == 0) { 
      $("#chkSearchAll").attr("checked", true) 
     } else if (i == 1) { 

      $("#chkSearchAll").attr("checked", false) 
     } 

    }); 

}); 

</script > 
1

香草JS:

var checkboxes = document.getElementsByClassName('activityCheckbox'); // puts all your checkboxes in a variable 

function activitiesReset() { 
    var checkboxesChecked = function() { // if a checkbox is checked, function ends and returns true. If all checkboxes have been iterated through (which means they are all unchecked), returns false. 
     for (var i = 0; i < checkboxes.length; i++) { 
      if (checkboxes[i].checked) { 
       return true; 
      } 
     } 
     return false; 
    } 
    error[2].style.display = 'none'; // an array item specific to my project - it's a red label which says 'Please check a checkbox!'. Here its display is set to none, so the initial non-error label is visible instead. 
     if (submitCounter > 0 && checkboxesChecked() === false) { // if a form submit has been attempted, and if all checkboxes are unchecked 
      error[2].style.display = 'block'; // red error label is now visible. 
     } 
} 

for (var i=0; i<checkboxes.length; i++) { // whenever a checkbox is checked or unchecked, activitiesReset runs. 
    checkboxes[i].addEventListener('change', activitiesReset); 
} 


說明:
一旦表單提交已嘗試,這將更新您的複選框節」如果他/她還沒有,則通知用戶檢查複選框。如果未選中複選框,則會顯示隱藏的「錯誤」標籤,提示用戶「請選中複選框!」。如果用戶至少選中一個複選框,紅色標籤會再次被隱藏,顯示原始標籤。如果用戶再次取消選中所有複選框,紅色標籤將實時返回。這是由JavaScript的onchange事件成爲可能(寫爲.addEventListener('change', function(){});

0

您可以檢查ATLEAST一個複選框被選中或不使用這個簡單的代碼,你也可以刪除你的信息。

參考Link

<label class="control-label col-sm-4">Check Box 2</label> 
    <input type="checkbox" name="checkbox2" id="checkbox2" value=ck1 /> ck1<br /> 
    <input type="checkbox" name="checkbox2" id="checkbox2" value=ck2 /> ck2<br /> 

<script> 
function checkFormData() { 
    if (!$('input[name=checkbox2]:checked').length > 0) { 
     document.getElementById("errMessage").innerHTML = "Check Box 2 can not be null"; 
     return false; 
    } 
    alert("Success"); 
    return true; 
} 
</script> 
相關問題