質問: last.validationEngine("validate"); if (!ret){return;} // 以下、やむなくサーバーサイドのバリデーションでエラーを発生させている }); ``` ### 試したこと * それ以外のテキストボックス等のフォーム内要素において、正常にjQuery-Validation-Engineが動作することを確認しました。 * 対象となるチェックボックスはバリデーションが動作しませんが、BootstrapToggleは正常に動作することを確認しました。 * 対象となるチェックボックスからBootstrapToggleを外す(data-toggle属性を削除する)と、バリデーションが正常に行われることを確認しました。 * jQuery-Validation-EngineとBootstrapToggleのJSファイルをロードする順序を入れ替えてみました、が解決しませんでした。 (jQuery, BootStrap, BootstrapToggle, jQuery-Validation-Engineの順に ロードしています) * 現在はjQuery-Validation-Engine でエラーを発生させられないので、やむなくサーバーサイドでエラーを発生させて実現しています。 ### 補足情報(言語/FW/ツール等のバージョンなど) macOS Sierra 10.12.5(16F73) PHP 5.6.30 CakePHP2.9.9 jQuery 2.2.4 (CDN) BootStrap 3.3.7 (CDN) BootstrapToggle 2.2.2 (CDN) 以上のローカル環境で検証しています。
回答: ソースコードの`last.validationEngine("validate");`の部分ですが、これは、たぶんバリデーション結果チェックをしているんだと思うのですが、`jquery.validation.engine()`だとバリデーションチェックのみはできません。 通常バリデーションエラー時に何かしたい場合は、下記のようにします。 ``` // すべてのフォームで同じ動作にする場合 $('#block31AddForm').validationEngine('attach', { focusFirstField: false, promptPosition: "topRight", scroll: false, onSuccess : function (form, status) { // バリデーション成功時の動作 }, onFailure : function (form, status) { // バリデーションエラー時の動作 }, onValidationComplete : function (form, status) { // バリデーション完了時の動作(成功、失敗関係なく); } }); // 個々のフォームで違う動作にする場合 $(個々のフォーム).validationEngine('attach', { focusFirstField: false, promptPosition: "topRight", scroll: false, onSuccess : function (form, status) { // バリデーション成功時の動作 }, onFailure : function (form, status) { // バリデーションエラー時の動作 }, onValidationComplete : function (form, status) { // バリデーション完了時の動作(成功、失敗関係なく); } }); ``` `validate`メソッドは、手動でバリエーションを行いたい場合に使用します。 この場合、前に`attach`を行っていると2重起動になりますので、予期せぬ動作になります。 ``` var バリデーション結果(true|false) = $(form).validationEngine('validate', {設定}); ```