2011-07-01 99 views
26

我試圖用「errorPlacement」從jQuery驗證DOCSjQuery驗證 - 錯誤放置

$("#myform").validate({ 
    errorPlacement: function(error, element) { 
    error.appendTo(element.parent("td").next("td")); 
    }, 
    debug:true 
}) 

我想以前無效輸入放置錯誤,但這不起作用:

$("#myform").validate({ 
     errorPlacement: function(error, element) { 
     error.appendTo(element.parent("form").prev("input")); 
     }, 
     debug:true 
    }) 

LIVE DEMO

非常感謝任何幫助!

+0

什麼標記看起來像何地在標記你想要把錯誤? – kinakuta

+0

@kinakuta - 現場演示已被添加到問題 – Iladarsda

+0

,所以你想錯誤消息出現在各自的文本框上方? – kinakuta

回答

42

既然你要插入的無效元素之前錯誤消息,使用insertBefore()

errorPlacement: function(error, element) { 
    error.insertBefore(element); 
} 
+0

Hamidi謝謝!這是行得通的!幾乎..就像你在我的例子中看到的那樣 - 實際上有兩個密碼輸入(一個用於onfocus效果,另一個用於真實效果),我們可以用#username insertbefore()來說明。和#realpassword insertBefore('#password')?? – Iladarsda

+0

這僅用於#password口令正確工作: 'errorPlacement:功能(錯誤,元素){ \t \t \t \t \t如果($( '標籤[用於= 「realpassword」]')){error.insertBefore(」 #密碼'); } \t \t \t \t \t else if(('label [for =「username」]')){error.insertBefore('#username'); } \t \t \t \t \t \t \t \t}'爲什麼? – Iladarsda

+0

@Pete,它應該可以工作,但錯誤信息仍然出現在瀏覽器中的''元素之後。浮動父''似乎是問題... –

2

另一種選擇是......

errorPlacement: function (error, element) { 
    element.before(error); 
    } 
12

只要把您想在哪裏錯誤的部分

<label for="[your checkbox id]" generated="true" class="error"></label> 

例如:

<label><input type="checkbox" name="checkbox" id="checkbox" value="1" > Checkbox content</label> 
<label for="checkbox" generated="true" class="error"></label> 
+0

非常時尚優雅的解決方案 – gouravtiwari21

+0

像親愛的很酷 – mghhgm

0

我建議使用HTML模板來指定,像這樣的位置和造型:

<input name="patient_gender" required> 
<label for="patient_gender" class="validation_error_message help-block"></label> 

和覆蓋功能錯誤放置

$.validator.setDefaults({ 
    errorPlacement: function(error, element) { 
     var name = element.attr('name'); 
     var errorSelector = '.validation_error_message[for="' + name + '"]'; 
     var $element = $(errorSelector); 
     if ($element.length) { 
      $(errorSelector).html(error.html()); 
     } else { 
      error.insertAfter(element); 
     } 
    } 
});