簡體   English   中英

Javascript和只有一個復選框 - 未定義

[英]Javascript and only one Checkbox - undefined

for (i = 0; i < document.checks.user.length; i++) //for all check boxes
{
    if (document.checks.user[i].checked == true )
    {
        document.checks.submit();
        return 0;
    }
}

<body>
<form action="" method=POST name="checks" ID="Form2">
  I have a bike:
  <input type="checkbox" name="user" value="Bike" ID="Checkbox1">
  <br>
  <br>
</form>
<input type="button" value="Delete" 
    class="btn" onclick="sub_delete()" 
    onmouseover="hov(this, 'btn btnhov')" onmouseout="hov(this, 'btn')" 
    id="Button1" name="Button1" 
/>
</body>

你可能已經知道什么時候只有一個復選框,document.checks.user.length = undefined。 什么是最有效的方法,以確保當只有一個復選框時,它將被刪除。 我在考慮將其添加為if語句之前的單獨if語句.....任何suggesstions。

謝謝。

使用循環控制變量,如果未定義長度,則將其設置為1 ...

var len = document.checks.user.length;
if(len == undefined) len = 1;
for (i = 0; i < len; i++) //for all check boxes

最好的祝福...

if (document.getElementById('Checkbox1').checked) { /* do something */ }

如果你想循環一堆復選框,你可以循環表單的輸入字段,如:

var formNodes  = document.checks.getElementsByTagName('input');
for (var i=0;i<formNodes.length;i++) {
   /* do something with the name/value/id or checked-state of formNodes[i] */
}

這很簡單,只需創建一個隱藏的輸入標記,其名稱與現有的復選框輸入標記相同。

例如:

<input type="checkbox" name="user" value="Bike" ID="Checkbox1">
<input type="hidden" name="user" value=""/>

你的問題有點令人困惑,因為你的javascript顯然必須在一個名為'sub_delete'的函數中才能使用......有強大力量來編輯問題的人可能會通過更清楚地改善這個問題...

因此,您必須解決的第一個問題是,對於具有給定名稱“user”的單個復選框,它不是數組,因此沒有定義的長度,但是如果您嘗試將其作為數組訪問它也是如此。事情變得困惑..你的javascript函數的完全重寫可能如下所示:

    function sub_delete{
        if (typeof document.checks.user.length === 'undefined') {
   /*then there is just one checkbox with the name 'user' no array*/
        if (document.checks.user.checked == true )
                            {
                                document.checks.submit();
                                return 0;
                            }   
    }else{
  /*then there is several checkboxs with the name 'user' making an array*/
        for(var i = 0, max = document.checks.user.length; i < max; i++){
            if (document.checks.user[i].checked == true )
                            {
                                document.checks.submit();
                                return 0;
                            }

        }
    }
    }//sub_delete end

HTH,-FT

我也面臨同樣的問題,共有5個復選框,其中4個被禁用,1個被啟用。 現在checkboxId.length是未定義的,所以我能想到的唯一選擇是if(checkboxId.length == undefined){checkboxId.checked = true&submith the form}。

if(document.checks.user[0]) {
  //it's an array
}
else {
  //it's a single element
}

jQuery是你的朋友:

$("input[type='checkbox']").attr('checked', false);

(...如果jQuery可供你使用?)

我可能會遍歷document.checks.elements,尋找.type =='checkbox'。

暫無
暫無

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

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