ここで単純な何かが欠けていることを認める準備ができています。jquery docs ページのドキュメントには、基本的なカスタム検証を行うために必要なすべての情報が実際には含まれていないことがわかりました。
私の問題は、要素に含まれていないデータを検証する必要があるため、一種の「ダミー」要素を使用してカスタムメソッドをトリガーしようとしていることです。
<div id="modal-dialog-overlay">
<div id="modal-background"></div>
<article id="dialog-form" class="event-module module">
<header>
<h6>New Event</h6>
<section class="module-actions">
<span class="button" onclick="overlay_select('modal-dialog-overlay', true);">Cancel</span>
<span class="primary button" onclick="createBEvent()">Create Event</span>
</section>
</header>
<section class="wrapper">
@using (Html.BeginForm("CreateEvent", "Conversations", FormMethod.Post, new { enctype = "multipart/form-data", id = "createEventForm", @class = "group" }))
{
<input id="participantsChecker" type="text" />
<input class="submit" type="submit" value="Submit"/>
}
</section>
</article>
</div>
</div>
そして、JavaScriptビットは
$.validator.addMethod("checkParticipants", function (value, element) {
alert($(".event-module .contact-handle [name='Key']").length);
return $(".event-module .contact-handle [name='Key']").length
}, "You need to invite at least one person.");
$("#createEventForm").validate({
rules: {
participantsChecker: {
checkParticipants: true
}
}
});
ドキュメントにあるページの準備完了。そのセレクターが探している要素を追加するページには他のコードがあり、それらは間違いなくそこにあります。いずれにせよ、フォームが送信されたときにそのアラートが表示されることはありません。フォームに何も入力せずに送信するだけでテストしていました。