2014-10-22 84 views
17

這看起來很簡單,但我無法弄清楚。我正在使用jquery validate插件。我試圖驗證<input name=first><input name=second>輸出錯誤信息到:Jquery驗證自定義錯誤消息位置

<span id="errNm2"></span> <span id="errNm1"></span> 

我已經開始寫errorPlacement:這是您自定義錯誤消息的位置。

如何將錯誤消息放入那些<span>

$(document).ready(function() { 
    $('#form').validate({ 
     errorPlacement: function(error, element) { 
      error.append($('.errorTxt span')); 
     }, 
     rules, 
}); 
<input type="text" name="first"/> 
<input type="text" name="second"/> 

<div class="errorTxt"> 
    <span id="errNm2"></span> 
    <span id="errNm1"></span> 
</div> 

回答

58

你應該用的是errorLabelContainer

jQuery(function($) { 
 
    var validator = $('#form').validate({ 
 
    rules: { 
 
     first: { 
 
     required: true 
 
     }, 
 
     second: { 
 
     required: true 
 
     } 
 
    }, 
 
    messages: {}, 
 
    errorElement : 'div', 
 
    errorLabelContainer: '.errorTxt' 
 
    }); 
 
});
.errorTxt{ 
 
    border: 1px solid red; 
 
    min-height: 20px; 
 
}
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script> 
 
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/jquery.validate.js"></script> 
 
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/additional-methods.js"></script> 
 

 
<form id="form" method="post" action=""> 
 
    <input type="text" name="first" /> 
 
    <input type="text" name="second" /> 
 
    <div class="errorTxt"></div> 
 
    <input type="submit" class="button" value="Submit" /> 
 
</form>


如果你想保留您的結構,那麼

jQuery(function($) { 
 
    var validator = $('#form').validate({ 
 
    rules: { 
 
     first: { 
 
     required: true 
 
     }, 
 
     second: { 
 
     required: true 
 
     } 
 
    }, 
 
    messages: {}, 
 
    errorPlacement: function(error, element) { 
 
     var placement = $(element).data('error'); 
 
     if (placement) { 
 
     $(placement).append(error) 
 
     } else { 
 
     error.insertAfter(element); 
 
     } 
 
    } 
 
    }); 
 
});
#errNm1 { 
 
    border: 1px solid red; 
 
} 
 
#errNm2 { 
 
    border: 1px solid green; 
 
}
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script> 
 
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/jquery.validate.js"></script> 
 
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/additional-methods.js"></script> 
 

 
<form id="form" method="post" action=""> 
 
    <input type="text" name="first" data-error="#errNm1" /> 
 
    <input type="text" name="second" data-error="#errNm2" /> 
 
    <div class="errorTxt"> 
 
    <span id="errNm2"></span> 
 
    <span id="errNm1"></span> 
 
    </div> 
 
    <input type="submit" class="button" value="Submit" /> 
 
</form>

+1

這是完美的!我不知道你可以將錯誤與數據錯誤相匹配。這是我今天學到的東西。謝謝@阿倫! – learntosucceed 2014-10-22 20:47:36

+0

謝謝!這對我有效。 – 2015-06-16 09:52:23

+0

大@Arun P Johny你節省我的時間 – 2015-11-19 15:12:21

11

您可以簡單地創建符合您在同樣的功能需要的字段這額外的條件。例如,使用上面的代碼...

$(document).ready(function() { 
    $('#form').validate({ 
     errorPlacement: function(error, element) { 
      //Custom position: first name 
      if (element.attr("name") == "first") { 
       $("#errNm1").text(error); 
      } 
      //Custom position: second name 
      else if (element.attr("name") == "second") { 
       $("#errNm2").text(error); 
      } 
      // Default position: if no match is met (other fields) 
      else { 
       error.append($('.errorTxt span')); 
      } 
     }, 
     rules 
}); 

希望幫助!

+0

這幾乎是爲我工作。我唯一的問題是'其他'條件。如何將其更改爲運行默認驗證位置? – 2016-10-19 16:31:20

+0

這是有效的,但是考慮Arun的解決方案,使用數據屬性來允許您在標記中指定它,而不必爲每個輸入的errorPlacement函數添加一個新條件,這不是非常乾燥。 – Kyle 2017-08-10 15:59:44

1
if (e.attr("name") == "firstName") { 
    $("#firstName__validate").text($(error).text()); 
    console.log($(error).html()); 
} 

嘗試錯誤對象的這種獲取文本