2013-05-20 6 views
0

У меня проблема проверки флажка multi, я хочу проверить, выбрал ли пользователь хотя бы один флажок. Im попробовать с document.getElementByClassName, но не работаетПроверка флажка с javascript

HTML:

<form id="formupload" method="post" enctype="multipart/form-data" action="upload.php" name="formupload"> 
    <input onKeydown="javascript:validateForm();" id="txtFileName" name="txtFileName" /> 
    <input onKeydown="javascript:validateForm();" id="title" name="title" /> 
    <input onKeydown="javascript:validateForm();" id="keywords" name="keywords" /> 
    <input onKeydown="javascript:validateForm();" id="description" name="description" /> 


     <span class="niche"> 
     <input type="checkbox" value="1" name="channel[]" class="css-checkbox" id="box_1"> 
     <label class="css-label" name="lbl_1" for="box_1">Amateur</label> 
     </span> 

     <span class="niche"> 
     <input type="checkbox" value="2" name="channel[]" class="css-checkbox" id="box_2"> 
     <label class="css-label" name="lbl_2" for="box_2">Amateur</label> 
     </span> 

     <span class="niche"> 
     <input type="checkbox" value="3" name="channel[]" class="css-checkbox" id="box_3"> 
     <label class="css-label" name="lbl_3" for="box_3">Amateur</label> 
     </span> 

<button id="btnSubmit" class="btn lbtn upBtn" type="submit">Upload</button> 
</form> 

И вот JavaScript:

function validateForm() { 
    var txtFileName = document.getElementById("txtFileName"); 
    var titleTxt = document.getElementById("title"); 
    var tagsTxt = document.getElementById("keywords"); 
    var descTxt = document.getElementById("description"); 

    var isValid = true; 
    if (txtFileName.value === "" || titleTxt.value === "" || tagsTxt.value === "" || descTxt.value === "") { 
     isValid = false; 
    } 

    document.getElementById("btnSubmit").disabled = !isValid; 

} 
+0

Где вы даже попытки определить состояние флажков? В приведенном JavaScript-коде рассматриваются только некоторые «нетипизированные» элементы 'input' (которые, как я полагаю, по умолчанию имеют текстовые поля?), Но не смотрят на флажки вообще. (К примеру, недопустимы. Знаки 'input' для флажков должны быть закрыты.) – David

+1

Вы можете попробовать' if (document.getElementById ("formupload"). QuerySelectorAll ('input [name = "channel [ ] "]: checked '). length> 0) {}' – Ian

+2

Элементы ввода @David не нужно закрывать, так как они могут не содержать никакого содержимого. Фактически, спецификация запрещает закрывающий тег. –

ответ

1
var checkBoxes=document.getElementsByClassName("css-checkbox"); 

var booleanResult=false; 
for(var i=0;i<checkBoxes.length;i++){ 
if(checkBoxes[i].checked){ 
    booleanResult=true; 
    break; 
} 
} 
if(booleanResult==false){ 
alert("invalid") 
} 

DEMO

+2

Должно быть, если (checkBoxes [i] .checked). Кроме того, я считаю, что это должно быть getElementsByTagName ('input'), с проверкой на type == 'checkbox' в цикле for. – Phaedrus

+2

Имейте в виду, что getElementByClassName не поддерживается версиями IE до 9.0. – Phaedrus

+0

@Phaedrus Так что лучше 'var checkBoxes = document.getElementsByName (" channel [] ");' –

1

В зависимости от того, изнуренный т целевой class или name, вы можете попробовать querySelectorAll:

var form = document.getElementById("formupload"); 
if (form.querySelectorAll('input[name="channel[]"]‌​:checked').length > 0) { 

} 
// or 
if (form.querySelectorAll('input.css-checkbox​:checked').length > 0) { 

} 

Конечно, вы могли бы добавить [type="checkbox"] ни к одному из них, но это, кажется, своего рода ненужными.

document.querySelectorAll имеет лучшую поддержку в старых браузерах и более универсален.

Конечно, если вам нужна более эффективная поддержка, вы можете получить все флажки, прокрутить их и проверить, есть ли у них класс, а затем проверить, проверено ли более одного. Например:

var form = document.getElementById("formupload"), 
    inputs = form.getElementsByTagName("input"), 
    i, cur, enoughChecked = false; 
for (i = 0; i < inputs.length; i++) { 
    cur = inputs[i]; 
    if (cur.type === "checkbox" && hasClass(cur, "css-class") && cur.checked) { 
     enoughChecked = true; 
     break; 
    } 
} 
if (enoughChecked) { 
    // At least 1 checkbox is checked 
} 

function hasClass(element, className) { 
    return !!~(" " + element.className + " ").indexOf(" " + className + " ")); 
} 

Ссылка:

Смежные вопросы