2

タブの後ろにフォーム フィールドが隠されているという問題を解決しようとしています。

送信ボタンをクリックすると、必須フィールドと非表示フィールドが自動的に表示されるように、この半分を機能させることができました。

しかし、問題は次の場合です。 1. ページをロードし、[送信] をクリックすると、問題なく動作します。2. 最初のタブに戻り、再度送信をクリックしても何も起こりません。

http://jsfiddle.net/3xEch/

// Form validator
var theForms = $("form[method=post]:not(.noValidate)");
if (theForms.length){
    theForms.each(function(){
        var $dis = $(this);

        if($dis.hasClass("validateHidden")){
            jQuery.validator.setDefaults({
                ignore: ''
            });
        }

        validater = $dis.validate({
            errorPlacement: function(error, element) {
                var trigger = element.next('.ui-datepicker-trigger, .input-label');
                if(!trigger.length){ trigger = element.parent('label'); }
                var labelWidth = element.parent("p").not(".full").find("label").eq(0).width();
                error.insertAfter(trigger.length > 0 ? trigger : element)
                     .css("marginLeft", labelWidth);

                // Check if hidden inside tab
                if(element.parents(".tab").is(":hidden")){
                    var tabs = element.parents(".tabs");
                    tabs.find(".tab").hide();
                    var tab = $("#"+element.parents(".tab").attr("id"));
                    tab.show();
                    tabs.find(".tabmenu li").removeClass("selected");
                    tabs.find(".tabmenu li").eq(tab.index()-1).addClass("selected");
                }
            }
        });

        $('.tabs').bind('tabsselect', function(){
            validater.resetForm();
        });
    });
}
4

2 に答える 2

4

この問題は、errorPlacement検証される要素ごとに が 1 回だけ呼び出されるという事実によるものです。

この質問を参照してください: jQuery Validation Plugin: Invoke errorPlacement function when onfocusout, keyup and click

showErrors検証を繰り返す場合は、この方法を使用することをお勧めします。

于 2012-11-02T13:34:27.300 に答える
1

このコードを実行する代わりに$(document).ready()、最初のタブが表示されるたびにこのコードを実行しますか?別のタブがクリックされたときにクリアされるHTML要素にイベントがバインドされているため、コードは最初から機能しないと推測しています。

于 2012-11-02T12:01:08.637 に答える