2014-09-11 21 views
1

我有一個使用php生成的27個複選框的數組。手動檢查複選框完美地工作。複選框以通常的形式放在一個包含name =「chk []」和value ='Index Number'的html表格中(其他表格包含日期)(全部在表單標籤內)當我執行一個典型的Java腳本「全部檢查」功能時(從link_click或button_click),所有複選框顯示覆選框爲'checked',但沒有任何提交。Print_r顯示'chk 「當我提交陣列確實是空的!使用javascript檢查複選框不會POST

如果我手動設置的複選框,$ _ POST(」 CHK「)陣列張貼,一切工作正常。

看來,檢查檢查時帶有Javascript的框,'已檢查'的值不會被張貼。

Print_r確認'chk'數組是空的,只要使用Javascript設置'顯示'值!

任何人都可以嘗試向我解釋爲什麼複選框的「顯示值」未反映或包含在帖子中?

頁面在W3C驗證好了,我爬過了我的代碼,找不到任何可能的錯誤。平臺是Win7/Wamp Sever/Firefox。 Google/StackOverflow搜索不會顯示任何類似的症狀/解決方案。

非常感謝任何人對這個問題的想法。

我使用JavaScript CheckAll功能是 -

function checkall(frm) { 
    for (var i=0; i<frm.elements.length; i++) { 
    if (frm.elements[i].name = "chk") 
    {frm.elements[i].checked = true;} 
    } 
    } 

27的複選框陣列處於正常陣列形式,以「值」是數組索引。

<tr><td><input type='checkbox' title='' name='chk[]' value='6' ></td> text label </tr> 
+0

您發佈uncheckall功能,而不是checkall功能。請糾正這一點,以便我們可以幫助您。 – iSWORD 2014-09-11 02:24:03

+0

謝謝iSWORD - 我需要更少的速度和更快速的呃! – KenAshton 2014-09-11 03:56:16

回答

4

在if條件中有兩個錯誤。

  1. 它甚至不是一個條件,這是一個賦值語句(條件是書面 雙等號)
  2. 元素名稱應該是比較CHK []代替CHK

您的檢查函數應該是:

function checkall(frm) { 
    for (var i=0; i<frm.elements.length; i++) { 
    if (frm.elements[i].name == "chk[]") 
     frm.elements[i].checked = true; 
    } 
} 

現在你可能想知道這到底是怎麼回事,這些價值觀沒有提交,爲什麼要檢查,我可以解釋。

您當前的代碼正在爲複選框元素分配一個新名稱「chk」(請參閱​​reason1爲什麼您的條件甚至不是條件),並且由於它不是條件,所以if語句始終爲true,並且代碼將checked值設置爲true的段正在執行,這就是爲什麼你可以看到元素被檢查。現在當你在你的PHP中請求$ _POST ['chk []']時,你什麼也得不到,因爲你所謂的(如果是「條件」)元素的名字全部變成了'chk'。

+0

SWORD,這是一個很棒的解釋人。 「顯示」值的「非發佈」完全在我看來。謝謝教導。我不確定我如何「接受」你的答案,我完全是這樣做的。 II沒有找到非常直觀的界面,我會檢查幫助並做到這一點。謝啦。 – KenAshton 2014-09-11 04:49:11

0

iSWORD有一個完整的答案,這只是一些額外的提示。你可以通過內置的瀏覽器功能簡化的功能:

function checkall(frm) { 
    var cbs = frm['chk[]']; 
    for (var i=0, iLen=cbs.length; i<iLen; i++) { 
    cbs[i].checked = true; 
    } 
} 

表單控件可作爲形式的命名屬性。如果多個控件共享同一個名稱,則會返回一個HTML集合。因此,在上面,cbs是名稱爲'chk[]'的所有控件的集合。

,以說明有可能是零,一個或多個同名的控制的情況下,使用:

function checkall(frm) { 
    var cbs = frm['chk[]']; 
    if (cbs) { 
    if (typeof cbs.length == 'number') { 
     for (var i=0, iLen=cbs.length; i<iLen; i++) { 
     cbs[i].checked = true; 
     } 
    } else { 
     cbs.checked = true; 
    } 
    } 
} 

你也可以使用querySelectorAll,它總是返回集合(但可能無法使用無處不在),並使用與第一功能如下:

var cbs = document.querySelectorAll('input[name="chk[]"]'); 
0

您可以嘗試使用此功能

的Javascript

function checkall(formname,checkname,thestate){ 
    var el_collection=eval("document.forms."+formname+"."+checkname) 
    for (c=0;c<el_collection.length;c++) 
    el_collection[c].checked=thestate 
} 

HTML

<a href="javascript:checkall('test','chk',true)">Check All</a> 
<a href="javascript:checkall('test','chk',false)">Uncheck All</a>