2012-03-07 43 views
1

我正在構建我的表單中的驗證插件,並且每個工作都很好。但在複選框我得到這個爲HTML:div外的jQuery驗證插件錯誤

表檢查HTML複選框:

<div class="right"> 
    <div class="custom-checkbox"><input type="checkbox" name="family" value="" id="third-check" class="require-one error"><label for="third-check">Check off</label></div> 
    <div class="custom-checkbox"><input type="checkbox" name="family" value="" id="fouth-check" class="require-one"><label for="fouth-check">Check off</label></div> 
    <div class="custom-checkbox"><input type="checkbox" name="family" value="" id="five-check" class="require-one"><label for="five-check" class="">Check off</label></div> 
    <div class="custom-checkbox"><input type="checkbox" name="family" value="" id="six-check" class="require-one"> 
    <label for="checks" generated="true" class="error">Please check at least one box.</label> 
    <label for="six-check">Check off</label></div> 
</div> 

正如你所看到的錯誤是不是站在定製複選框股利之外。我怎樣才能做到這一點?

的JS:

$.validator.addMethod('require-one', function(value) { 
    return $('.require-one:checked').size() > 0; 
}, 'Please check at least one box.'); 

var checkboxes = $('.right .require-one'); 
var checkbox_names = $.map(checkboxes, function(e, i) { 
    return $(e).attr("name") 
}).join(" "); 

$(".valid").validate({ 
    meta: "validate", 
    groups: { checks: checkbox_names }, 
    errorPlacement: function(error, element) { 
    if (element.attr("type") == "checkbox") 
     error.insertAfter(checkboxes.last()); 
    else 
     error.insertAfter(element); 
    } 
}); 

回答

2

試試這個:因爲你想在div後的消息(這是父)添加到當前

error.insertAfter(element.parent()); 

元件。

UPDATE:聊天討論後,正確的雁是:

error.insertAfter(element.parent().siblings().last()); 
+0

這不是工作,我認爲它必須是在error.insertAfter(checkboxes.last());但是我得不到工作... – Maanstraat 2012-03-07 13:21:19

+0

如果您使用element.parent()而不是checkboxes.last(),它會在哪裏放置錯誤消息? – robasta 2012-03-07 13:23:02

+0

在costum-checkbox div之外,但是然後錯誤是作爲第二項而不是最後的東西...所以然後我有:複選框,錯誤,複選框,複選框,複選框。 – Maanstraat 2012-03-07 13:26:43

0

你可以做這樣的事情是爲我工作。 「optLocation」在上面的例子中複選框相同的「家庭」

jQuery("#frmAddProducts").validate({         
    errorElement:'div', 
    errorPlacement: function(error, element) {error.appendTo (element.siblings(".errordiv")); },  
    rules: { 
       txtProductTitle:{required: true}, 
       txtPrice:{required: true, number: true}, 
       optCategory:{required: true}, 
       optMainCategory:{required: true}, 
       txtProductImage:{required: true}, 
       optLocation:{required: true, minlength: 1},     
       txtSummary:{required: true}, 
       txtDetails:{required: true} 
      }, 
    messages: { 
       txtProductTitle: { required: "Please enter a title" }, 
       txtPrice:{required: "Please enter a price",number: "Please enter only digits"}, 
       optCategory:{required: "Please select a sub-category"}, 
       optMainCategory:{required: "Please select a category"}, 
       txtProductImage:{required: "Please upload images"}, 
       optLocation: { minlength: "Please select a location", required: "Please select a location" }, 
       txtSummary:{required: "Please enter summary"}, 
       txtDetails:{required: "Please enter description"} 
      }, 
    submitHandler: function() { fnAddProduct(); } 

    });