2013-03-13 62 views
0

嗨,我有一個HTML表單。javascript chalanging表單elemts數組驗證

<form name="modeladd" ethod="post" class="form label-inline" enctype="multipart/form-data" onSubmit="return check('modeladd');"> 
      <?php for($i=0;$i<$tot;$i++) { ?>  
       <div class="field"> 
       <label for="connect_msg">Connect Message </label>                 
       <textarea rows="4" cols="50" name="connect_msg[<?php echo getField($langs[$lan]);?>]" id="connect_msg[]"><?php echo getField($row[$lan]); ?></textarea> 
       </div>    
       <div class="field"> 
       <label for="call_msg">Call Message :</label>             
       <textarea rows="4" cols="50" name="call_msg[<?php echo getField($langs[$lan]);?>]" id="call_msg"><?php echo getField($row[$lan]); ?></textarea> 
       </div> 

       <div class="field"> 
       <label for="stripline_msg">Stripline Message :</label>            
       <textarea rows="4" cols="50" name="stripline_msg[<?php echo getField($langs[$lan]);?>]" id="stripline_msg"><?php echo getField($row[$lan]); ?></textarea> 
       </div> 
      <div class="field"> 
        <label for="cost_msg">Cost Message :</label>             
       <textarea rows="4" cols="50" name="cost_msg[<?php echo getField($langs[$lan])?>]" id="cost_msg"><?php echo getField($row[$lan]); ?></textarea> 
       </div>   
       <?php } ?> 
<input type="submit" class="btn btn-grey" value="submit"> 
</form> 

這裏是驗證

function check(form) 
{ 
    var name = new Array(); 
    name =document.getElementById('connect_msg[]').value; 

    for(var i=0 ; i<=1; i++) 
    { 
     alert(name[i].value); 
    } 
    return true; 
} 

我不是爲這兩個領域connect_msg是陣列中獲得價值的JavaScript。我想用JavaScript來驗證這兩個字段值,因此請幫我

+0

您只能使用一個具有相同ID的元素。 – jcubic 2013-03-13 07:44:39

+0

是的,這就是爲什麼我已經在connect_msg元素中使用數組了 – 2013-03-13 07:45:55

回答

2
  1. id不能有[]符號。請驗證您的標記:http://validator.w3.org/
  2. 從元素返回的value類型爲string,因此您無法獲取數組。你可以做的是解析字符串來創建你的數組。

例如,假設下面是輸出標記:

<textarea id="connect_msg">a,b,c,d,e,f,g</textarea> 

您可以在JavaScript中做到這一點:

var getConnectMsg = document.getElementById('connect_msg').value; 
var connectMsgArray = getConnectMsg.split(','); 

而且connectMsgArray將包含['a','b','c','d','e','f','g']

你可以閱讀更多關於.split()這裏:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split

編輯:既然你說textarea是在一個循環中,那麼它更容易檢索使用class name屬性的元素,並使用jQuery會幫助你非常。

所以HTML輸出會是這樣:

<textarea class="connect_msg" id="connect_msg1">a,b,c,d,e,f,g</textarea> 
<textarea class="connect_msg" id="connect_msg2">h,i,j,k,l,m,n</textarea> 
<textarea class="connect_msg" id="connect_msg3">q,r,s,t,u,v</textarea> 

var getConnectMsg = $('.connect_msg'); 
getConnectMsg.each(function(){ 
    var getValue = $(this).val(); 
    var connectMsgArray = getValue.split(','); 
}); 

.each()的每次迭代中,getValue值將是:

a,b,c,d,e,f,g 
h,i,j,k,l,m,n 
q,r,s,t,u,v 

你可以做你的表單驗證一組每次迭代期間的字段。

+0

這個taxtarea在循環中,所以沒有單個id = connect_msg可能,每個textarea需要唯一的id, – 2013-03-13 07:54:12

+0

另外,不要使用'new Array();'實際上會讓解釋器調用Array構造函數並添加不必要的開銷。要創建一個數組,只需添加空方括號'var name = [];' – 2013-03-13 07:54:31

0

名稱不能是多維數組更改此:

name="connect_msg[<?php echo getField($langs[$lan]);?>]" 

要這樣:

name="connect_msg[]" 

然後在後腳本foreach循環解決這些問題。
約在ID用這個來代替()我不知道,如果這是真的,你不能在ID用[],但我知道這個工作對我來說:

id="connect_msg_<?php echo getField($langs[$lan]);?>" 

更新: 我認爲你的權利,也許使用一個類而不是id是要走的路。

class="connect_msg" 

然後在表格檢查功能,而不是這樣的:通過connectMsg陣列

var connectMsg = document.getElementByClassName('connect_msg'); 

然後循環和獲取/驗證值:

var name = new Array(); 
name =document.getElementById('connect_msg[]').value; 

執行此操作。
希望得到這個幫助。

+0

不,它的名稱可以正常工作我想要ID元素的值不是名稱謝謝 – 2013-03-13 07:57:23

+0

id =「connect_msg _ <?php echo getField($ langs [$ lan] );?>「我如何獲得這個元素的值在表單提交 – 2013-03-13 08:00:08

+0

我認爲你的權利檢查編輯。 – 2013-03-13 08:13:54