http://bassistance.de/jquery-plugins/jquery-plugin-validation/ 最高のjquery検証プラグインのようです。ただし、jQuery UIダイアログでは機能しないようです。
このコードは、ダイアログDIVの外部で機能します。
<script type="text/javascript">
$(document).ready(function() {
$("form").validate();
$("a").bind("click", function() { alert($("form").valid()); });
});
</script>
<form method="get" action="">
<p>
Name
<input id="name" name="name" class="required" minlength="2" />
</p>
<p>
E-Mail
<input id="cemail" name="email" size="25" class="required email" />
</p>
<a href="#" id="clickTest">Click</a>
</form>
これはうまくいきます。フォームをダイアログのdivに移動してダイアログを開き、リンクをクリックすると、trueが返されます。
<form>
タグを使用せずにこのキラーjquery検証プラグインを使用する方法はありますか?または、これを成功させるためのさらに良い方法はありますか?
他の誰かがこれに遭遇した場合、jQuery-UIダイアログはフォームに追加せず、</body>
の直前に追加するため、検証する要素は<form></form>
セクションの外にあります。
これを解決するには、次のように、フォームの作成時にダイアログをフォーム内に移動するように指示します。
$("#mydiv").dialog("open").parent().appendTo(jQuery("form:first"));
valitidy jquery plugin を使用できます
JavaScript
function validateForm(){
$.validity.start();
// Required:
$("#recipientFirstName").require();
var result = $.validity.end();
return result.valid;
}
$(document).ready(function() {
$('#dialog').dialog({
autoOpen: false,
title: 'My title',
width: 600,
modal: true,
buttons: {
"Ok": function() {
if(validateForm()) {
saveOrder();
$(".validity-tooltip").css("display", "none");
$(this).dialog("close");
}
},
"Cancel": function() {
// The following line was added to
// hide the tool-tips programmatically:
$(".validity-tooltip").css("display", "none");
$(this).dialog("close");
}
}
});
})
フォームに「myform」のようなIDを付けてみてください。
次に、この呼び出しをクリックテストアンカーのonclickイベントに追加してみます。
onclick = 'return($( "#myform")。validate()。form());'
document.readyで検証を行う代わりに。
Nick Craverソリューションは私にとっては機能しましたが、IE7に対しては完全には機能しません。
IE7には、ネストされた要素のz-indexを考慮しないバグがあります。したがって、ダイアログの親をフォームに移動すると、オーバーレイがダイアログの上になり、ユーザーがダイアログを操作できなくなります。 IE7の修正は、オーバーレイのz-indexを-1に設定し、ダイアログの場合と同じようにオーバーレイ要素を複製してフォームに追加することです。次に、ダイアログの閉じるイベントで、複製されたオーバーレイを削除します。 IE7 Z-Indexレイヤリングの問題
Webサイトのレイアウトによっては、オーバーレイを移動するだけで、クローンを作成する必要がない場合があります。私のウェブサイトのレイアウトには左と右の余白があり、エリア全体をカバーするオーバーレイが必要だったので、私はそれを複製する必要がありました。以下は私がしたことの例です:
var $dialog = $('#myDialog');
var $form = $dialog.parents('form:first');
$dialog.dialog({
autoOpen: false,
title: 'My Dialog',
minWidth: 450,
minHeight: 200,
modal: true,
position: ['center', 'center'],
close: function () {
// IE7 BUG: Needed to add an additional overload because of the z-index bug in IE7.
$('.ui-widget-overlay-ie7fix:first').remove();
},
buttons: dialogButtons
});
$form.prepend($dialog.parent());
$dialog.dialog('open');
if ($.browser.msie && $.browser.version.slice(0, 1) == "7") {
var $overlay = $('body .ui-widget-overlay:first');
$form.prepend($overlay.clone().addClass('ui-widget-overlay-ie7fix'));
$overlay.css('z-index', '-1');
}
ありがとう、ギャリー
これは関連があるかもしれませんし、そうでないかもしれませんが、これは私の問題と解決策でした:
まったく同じ問題が発生しました。ダイアログを開くと、「フォーム」タグが「div」タグに置き換えられました。
これは、既に開いているフォーム要素にダイアログを配置したためです(明らかに、フォーム内にフォームを含めることはできません)。
私がしたことをしないでください:)
<form>
<form>
</form>
</form>
私はこれを使用して、IE8、jQuery 1.11.2およびjQuery Validate 1.13.1を使用するasp.netアプリケーションで動作します。
$('#lnz_NuevoLink').click(function () {
$("#lnz_AgregarDiv").dialog("open").parent().appendTo(jQuery("#aspnetForm")); //Add the dialog to the form
$("#lnz_AgregarDiv").parent().attr('style', 'z-index: 101'); //To avoid the modal
$("#lnz_AgregarDiv").dialog("option", "position", { my: "center", at: "center", of: window }); //To center the dialog
})
代わりにフォームをdivでラップしてみましたか(W3C仕様によると、フォームタグをdiv内に含めることは許可されていません)。
プラグインを書き直さないと、フォーム要素なしでこれを行う理由がわかりません。
最近、HTMLフォーム検証用のプラグインを作成しました。自分で試すことができます。 Prashant-UI-Validator
Jqueryを使用してビルドし、Bootstrapをサポートし、あなたの方法で構成できます。INT、STRING、NUMERIC、MAX [Num]、MIN [Num]、EMAILなどのさまざまなデータ型をサポートし、最も重要なカスタムJavaScript検証コードも同様です。
それが役に立てば幸い、
私はこの質問が古いことを知っていますが、私もこの問題に出くわしたので、私の解決策を投稿しています。
JQuery検証プラグイン(最良の選択のようです)を保持し、Nick Craverが提案するようにダイアログを移動したくない場合は、これを<form>
タグに追加するだけです。
onsubmit="return false;"
これにより、フォームが送信されなくなります。特別な状況で送信する必要がある場合は、必要に応じてこの戻り値を変更してください。
人気のあるjQuery.validationEngineへのこのパッチを見て、非フォームタグを検証ターゲットとして許可してください。
https://github.com/posabsolute/jQuery-Validation-Engine/pull/101
この価値があると思ったら、コメントを残してください...現在のところ、作者はパッチをプルしません。
私は このjQuery検証プラグイン を使用して、既存のコードの周りに独自のプラグインを記述することにしました。