簡體   English   中英

驗證單個單選按鈕在可用的javascript驗證腳本中不起作用

[英]Validating a single radio button is not working in available javascript validation script

我有隨機生成的單選按鈕系列

<input type="radio" name="creatorusers" value="1">
<input type="radio" name="creatorusers" value="1">
<input type="radio" name="creatorusers" value="1">
<input type="radio" name="creatorusers" value="1">
.....so on

但我只得到一個單選按鈕並執行為它提供的javascript驗證chk是否選中單選按鈕,然后它不起作用Ples幫助我解決這個問題。

mycreator = -1;

  for (i=frm.creatorusers.length-1; i > -1; i--) {
  if (frm.creatorusers[i].checked) {
  mycreator = i; i = -1;
  }
  }
  if (mycreator == -1) {
  alert("You must select a Creator User!");
  return false;
  }

始終(!)使用var關鍵字。 否則你的變量將在全局范圍內(是的,甚至是函數體中的變量),這可能會導致一些難以追蹤的錯誤。

正如@Felix指出的那樣 ,如果表單中有多個具有該名稱的元素,則creatorusers將只是一個數組。 您可以在必要時創建單元素數組來解決此問題。

這是一個抽象函數,可以驗證任意復選框列表。

function ensureChecked(checkboxes, error) {
  if (checkboxes) {
    var cbx = (checkboxes.length > 0) ? checkboxes : [checkboxes]; 
    for (var i=0; i<cbx.length; i++) {
      if (cbx[i].checked) {
        return true;
      }
    }
    alert(error);
  }
  return false;
}

打電話給

ensureChecked(frm.creatorusers, "You must select a Creator User!");

我現在啊。 如果您只有一個單選按鈕,則frm.creatorusers不是數組。 跳過它:

var mycreator = -1;
var checked = false;

if(typeof frm.creatorusers.length === 'number') {
    for (var i=frm.creatorusers.length; i--; ) {
      if (frm.creatorusers[i].checked) {
          mycreator = i;
          checked = true;
          break;
      }
    }
}
else if(frm.creatorusers.checked){
    mycreator = //? what here?
    checked = true;
}

if(!checked) {
     alert("You must select a Creator User!");
     return false;
}

如果mycreator僅用於檢查是否選擇了按鈕,則可以從上面的代碼中完全刪除它。

您的代碼的一些進一步說明:

  • 始終使用var聲明變量,否則它們將是全局變量。
  • 使用break來結束循環。
  • 也許這只是因為復制和粘貼,但是有很多具有相同值的單選按鈕沒有多大意義。

你可以這樣做:

function validate(frm){
    var isChecked = false;

    for (var i=0; i<frm.elements.length; i++)
    {
       if (frm.elements[i].type === 'radio'){
         if (frm.elements[i].checked === true){
           isChecked = true;
           break;
         }
       }
    }

    if (isChecked === true){
       return true;
    }
    else{
       alert('You should select an option first !');
    }
}

現在你應該在表單的onsubmit事件上調用上面的函數:

<form onsubmit="return validate(this);">

現在validate功能將確保至少檢查一個單選按鈕,否則它將不會提交。

這應該做到這一點

function isRadioSelected(btn) {

    if(typeof btn.length === 'number') {
        for(var i=0;i<btn.length;i++)
            if(btn[i].checked) return true

    }else{
        if(btn.checked) return true
    }

    return false

}

您可以嘗試這樣的事情:

<html>
<head>
<script type="text/javascript">     
function confirmsubmit() {
       var btn = document.formname.buttonname

       if (btn.checked == false) 
       {
        window.alert("You did not click the button.");
        btn.focus();
        return false;
        }

        return true;
}
</script>
</head>

<body>

<form method="post" action="mailto:youremail@yourdomain.com" 
name="formname" onsubmit="return confirmsubmit();">
click here: <input type="radio" name="buttonname"><br />

    <p><input type="submit" value="Submit" name="submit"></p>

</form>

</body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM