2010-10-12 151 views
1

有人會看看這個,並告訴我我做錯了什麼嗎?我沒有從這個JQ函數中得到任何東西,並且錯誤div是空的。我對JQ非常陌生,所以請真正簡單。錯誤div未被填充

$(function() { 
    $('#form').submit(function() { 
    $(this).find('.error').hide(); 
    try { 
     $.ajax({ 
     'url':  $(this).attr('action'), 
     'type':  $(this).attr('method'), 
     'data':  $(this).serialize(), 
     'dataType': 'json', 
     'success': function($response, $textStatus, $XMLHttpRequest) { 
      if(typeof($response.status) != 'undefined' && $response.status == 'OK') { 
      } else if(typeof($response.errors) != 'undefined') { 
      $.each($response.errors, function($field, $message) { 
       $('#' + $field) 
       .addClass('invalid') 
       .siblings('.error') 
        .text($message) 
        .show(); 
      }); 
      } else { 
      throw new Error('Undecipherable response from the server!'); 
      } 
     }, 
     'error': function($XMLHttpRequest, $textStatus, $errorThrown) { 
     } 
     }); 
    } catch($err) { 
     // Display global error or redirect to 500 page. 
    } 
    }); 
}); 

<form method="post" action="1.php" id="form"> 
    <input type="text" name="test" value="" id="test" /> 
    <input type="submit" name="submit" value="submit" id="submit" /> 
</form> 
<div class="error"></div> 

回答

3

我看到的第一個問題是:div.error不是input的兄弟元素,因此jQuery的找錯了地方。

   +-----------------------------------------------+ 
       |            | 
       form           div.error 
       | 
    +----------+------------+ 
    |      | 
    input     input 

如果將error DIV 形式:

<form method="post" action="1.php" id="form"> 
    <input type="text" name="test" value="" id="test" /> 
    <input type="submit" name="submit" value="submit" id="submit" /> 
    <div class="error"></div> 
</form> 

那麼它應該工作。我也建議使用fieldset標籤,以減少範圍的困惑:

<form method="post" action="1.php" id="form"> 
    <Fieldset> 
     <input type="text" name="test" value="" id="test" /> 
     <input type="submit" name="submit" value="submit" id="submit" /> 
     <div class="error"></div> 
    </fieldset> 
</form> 

這樣,這裏只有一個兄弟error格(但無可否認在這種情況下,.error DIV是輸入的兄弟姐妹。這當然可能是故意的(因爲submit按鈕不能真正產生錯誤或本身無效。)

+0

大衛,再次感謝。我用你的html,但它仍然不工作。我得到的是一個轉發到1.php和從我的PHP迴應:'{「status」:「錯誤」,「錯誤」:{「test」:null}}' – jim 2010-10-12 07:33:03

+0

+1用代碼進行詳細解釋.. – noobcode 2010-10-12 07:34:23

+1

除了我錯誤之外,在關閉'.submit()'單擊處理程序'$(')'之前,還需要向jQuery返回'false' #form')。submit(function(){/*...*/ return false; });否則表單將正常提交,並且正如您所說,將表單重定向到「1.php」後面的表單「action」URL。 – 2010-10-12 07:36:55