iT邦幫忙

0

【動態資料列表單的驗證???】

  • 分享至 

  • xImage
<html xmlns="http://www.w3.org/1999/xhtml">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
.allen {
	color: #F00;
	font-weight: bold;
}
</style>

<SCRIPT LANGUAGE="JavaScript">
function change(){
	document.form1.item1.value=document.form1.item1.value;
	}

function check()
	{
		var re = /^\d+$/;
		if(!re.test(document.form1.item1.value))
		{
			alert("資料未填或格式錯誤(必須為數字!!!)");
			document.form1.item1.focus();
			return false;
		}
		else
		{
			return true;
		}
	}
</SCRIPT>




<form id="form1" name="form1" onSubmit="return check()" action="" method="post">
  <table id = "table1 "width="10%" border="1">
    <tr align="center" bgcolor="#00FF00">
      <td nowrap="nowrap"><strong>不能是空的,而且要數字</strong></td>
    </tr>
    <tr>
      <td><input type = "text" size = "5" name = "item1[]" id = "item1" value = "1" onchange="javascript:change();"></td>
    </tr>
	<tr>
        <td colspan="28" align="right">
			<input type="submit" name="submit" id="button" value="批次修改"/>
		</td>
	</tr>
  </table>
  <input type="hidden" name="MM_update" value="form1" />
</form>

以上是我可以驗證 item1 那欄的資料,只有【數字】才能按下按鈕送出資料
但是我那個檔案弄成 php 時
當 item1 會撈資料庫出來顯示時(資料列不一定,看資料庫的筆數)

假設撈出來的資料是 2 筆好了

上面的 javascript 就無法再判斷了
請問資料要怎麼改
才能讓動態的資料一樣可以去判斷呢??
謝謝

andyto202 iT邦研究生 4 級 ‧ 2013-05-26 14:48:52 檢舉
wiseguy兄
請問一下
您的寫法我執行是正常的
但是如果我的欄位中
有的一定要數字(問你的例子都是要數字的)
有的不用
照理說
應該你的例子是針對所有 input type = "text" 的吧
但是我去 update 資料時
我發現
不一定要輸入數字的欄位
我留空白
但是
為什麼就不會對那個欄位進行檢查呢??
andyto202 iT邦研究生 4 級 ‧ 2013-05-26 15:04:15 檢舉
應該是說
如果有的欄位要判斷的不一樣的話
function check(form)  
    {  
        var re = /^\d+$/;  
        for (var i=form.elements.length-1; i>=0; i--)  
        {  
            if(form.elements[i].type=='text' && !re.test(form.elements[i].value))  
            {  
                alert("資料未填或格式錯誤(必須為數字!!!)");  
                form.elements[i].focus();  
                return false;  
            }  
        }  
        return true;  
    }


要怎麼改呢
wiseguy iT邦超人 1 級 ‧ 2013-05-26 15:51:57 檢舉
1. 回到你原來的方式,一個欄位一個欄位個別檢查
2. 用迴圈的方式,但是跳過你所謂的特別欄位
方法很多啊~ 自己試著改改看吧。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

4
wiseguy
iT邦超人 1 級 ‧ 2013-05-26 00:56:56
最佳解答

把你的 onchange="javascript:change();" 去掉,這段是沒用的 code。假設你select 後所產生的動態筆數是四筆,如下所示:

<pre class="c" name="code">  <table id = "table1 "width="10%" border="1">  
    <tr align="center" bgcolor="#00FF00">  
      <td nowrap="nowrap"><strong>不能是空的,而且要數字</strong></td>  
    </tr>  
    <tr>  
      <td><input type = "text" size = "5" name = "item1[]" value = "1"></td>  
    </tr>  
    <tr>  
      <td><input type = "text" size = "5" name = "item1[]" value = "1"></td>  
    </tr>  
    <tr>  
      <td><input type = "text" size = "5" name = "item1[]" value = "1"></td>  
    </tr>  
    <tr>  
      <td><input type = "text" size = "5" name = "item1[]" value = "1"></td>  
    </tr>  
    <tr>  
        <td colspan="28" align="right">  
            <input type="submit" name="submit" id="button" value="批次修改"/>  
        </td>  
    </tr>  
  </table>  

那麼把 onsubmit 改為 onSubmit="return check(this);" ,再把 check 改為迴圈就好了:

<pre class="c" name="code">function check(form)
    {
        var re = /^\d+$/;
		for (var i=form.elements.length-1; i>=0; i--)
		{
	        if(form.elements[i].type=='text' && !re.test(form.elements[i].value))
	        {
	            alert("資料未填或格式錯誤(必須為數字!!!)");
	            form.elements[i].focus();
	            return false;
	        }
        }
        return true;
    }

不過要注意喔~ 不管你在 Web 上做了多嚴謹的檢查,後端的 php 一定要再檢查一次。因為 Web 的檢查是 user friendly 而已,而 php 的檢查才是 security。

我要發表回答

立即登入回答