2012-08-17 181 views
1

我只是試圖打印一個錯誤消息,如果有人留下文字字段空白使用jquery.But它沒有被顯示。 這是html代碼:jquery表單驗證

<form id="form1" runat="server"> 
    <div> 
    <table> 
    <tr> 
    <td> 
    <label>Name</label></td> 
    <td> <input class="required" type="text" name="name" id="name" /><span>(required)</span></td> 
    </tr><tr> 
    <td><br/><label>Address</label></td> 
    <td><input class="required" type="text" name="address" id="address"/><span>(required)</span></td></tr> 
    </table> 
    </div> 
    </form> 

這是jquery的代碼。

$(document).ready(function() { 
    var requiredFlag = ' * '; 
    $('form :input').filter('.required').next('span').text(requiredFlag).end(); 
    if ($(this).is('.required')) { 
     if (this.value == '') { 
     var errorMessage = 'This is a required field'; 
          }; 
      $('span></span').text(errorMessage).appendTo($(this)); 
          }; 
}); 

可能是我缺少的東西。 幫助專家。 謝謝。

+0

我不明白你的jQuery代碼,您應該爲每個輸入元素的循環,然後使用這個目的。您正在使用$(this)不正確 – Skatox 2012-08-17 13:04:25

+0

爲什麼您不想在提交後驗證表單?你也可以使用jQuery驗證插件 - http://docs.jquery.com/Plugins/Validation#Example。附:以及什麼是「跨度」 LLAlive 2012-08-17 13:07:29

+0

你認爲在js「this」中究竟是什麼?這包含了上下文,但是因爲您沒有迭代任何集合,或者使用另一個函數/類來調用它,所以這是基本上下文 - windows(或document?)對象 – alonisser 2012-08-17 13:07:31

回答

1
  1. this在代碼是指window/document對象不是input元件;
  2. 您的代碼中有一些拼寫錯誤=>$('span></span');
  3. 有一個在你的驗證inputs
  4. 代碼沒有event handler您的標記span元素,也沒有必要產生一個新的
  5. 可以使用的形式submit事件驗證輸入
  6. :input選擇已棄用

試試這個:

var errorMessage = 'This is a required field'; 
$('form input.required').next().text('*'); 

$('form').submit(function(){ 
    var errors = 0; 
    $('input.required', this).each(function(){ 
     if (this.value == '') { 
      $(this).next().text(errorMessage); 
      errors++; 
     } 
    }) 
    if (errors > 0) { 
    return false // prevents the default action of the event if there are errors 
    } 
}) 
  1. submit()
  2. next()
  3. each()