0

一部の要素に spry 検証が適用されたフォームがあります。

このフォームには、選択内容に応じて特定の要素を非表示にするドロップダウンもあります。

最初は、spry 検証コードはページの下部にありましたが、検証用のフォーム フィールドが存在しないため、フォームが送信されませんでした..次のことから始めました。

function checkPageType(myType){
    switch (myType) {
            case 'Standard Page':
            $('.slugDiv').show();
            break;
            case 'Borough Menu':
            $('.slugDiv').hide();
            break;
        case 'Area Menu':
            $('.slugDiv').hide();
        case 'Forms Menu':
            $('.slugDiv').hide();
        break;  
        }
    }   
    $('#idptp_sec').change(function() {
        var myVal = $(this).val();
        checkPageType(myVal);
    });

そしてマイページの一番下に

<script type = "text/Javascript">
var slug_sec_Spry = new Spry.Widget.ValidationTextField("slug_sec_Spry", "none",{validateOn:["blur"], characterMasking: /^[a-z0-9-]+$/, useCharacterMasking:true});
</script>

これを関数内に移動しようとしましたが、まだ機能しません。おそらく関数内にしかスコープがないためだと思いますか?

function checkPageType(myType){
    switch (myType) {
        case 'Standard Page':
            $('.slugDiv').show();
            var slug_sec_Spry = new Spry.Widget.ValidationTextField("slug_sec_Spry", "none",{validateOn:["blur"], characterMasking: /^[a-z0-9-]+$/, useCharacterMasking:true});
        break;
        case 'Borough Menu':
            $('.slugDiv').hide();
            slug_sec_Spry.destroy();
            slug_sec_Spry= null;
        break;
        case 'Area Menu':
            $('.slugDiv').hide();
            slug_sec_Spry.destroy();
            slug_sec_Spry= null;
        case 'Forms Menu':
            $('.slugDiv').hide();
            slug_sec_Spry.destroy();
            slug_sec_Spry= null;
        break;  
    }
}   
$('#idptp_sec').change(function() {
    var myVal = $(this).val();
    checkPageType(myVal);
});

ページが読み込まれた後にフィールドが非表示になっている場合、フィールドが検証されないようにするにはどうすればよいですか?

アップデート:

ここにある他の解決策を試しています: Spryの検証により、使用できないフィールドでのフォーム送信が防止されます

コードを次のように変更しました。

var slug_sec_Spry =  Spry.Widget.ValidationTextField("slug_sec_Spry", "none",{validateOn:["blur"],characterMasking: /^[a-z0-9-]+$/, useCharacterMasking:true});

    function clearValidation(){
    if(slug_sec_Spry){
        slug_sec_Spry.reset();
        slug_sec_Spry.destroy()
    }
}

function reapplyValidation(){
    slug_sec_Spry = new Spry.Widget.ValidationTextField("slug_sec_Spry", "none",{validateOn:["blur"],characterMasking: /^[a-z0-9-]+$/, useCharacterMasking:true});
}
    function checkPageType(myType){
        switch (myType) {
            case 'Standard Page':
                $('.slugDiv').show();
                reapplyValidation()
            break;
            case 'Borough Menu':
                $('.slugDiv').hide();
                clearValidation()
            break;
            case 'Area Menu':
                $('.slugDiv').hide();
                clearValidation()
            case 'Forms Menu':
                $('.slugDiv').hide();
                clearValidation()
            break;  
        }
    }   
    $('#idptp_sec').change(function() {
        var myVal = $(this).val();
        checkPageType(myVal);
    });

しかし、それらは TypeError を生成します:this.isBrowserSupported is not a function

4

1 に答える 1

0

現在作業中ですが、そこにエラーチェックコードが必要でした...

<script type="text/javascript">
$(document).ready(function() {
    var  isHidden = false;

    function clearValidation(){
        slug_sec_Spry.reset();
        slug_sec_Spry.destroy();
        $('.slugDiv').hide();
        isHidden = true;

    }
    function reapplyValidation(){
        $('.slugDiv').show();
        slug_sec_Spry = new Spry.Widget.ValidationTextField("slug_sec_Spry", "none",{validateOn:["blur"], characterMasking: /^[a-z0-9-]+$/, useCharacterMasking:true});
        isHidden = false;
    }
    function checkPageType(myType){
        switch (myType) {
            case 'Standard Page':
                if(isHidden == true){
                    reapplyValidation();
                }

            break;
            case 'Borough Menu':
                if(isHidden == false){
                    clearValidation()
                }
            break;
            case 'Area Menu':     
                if(isHidden == false){
                    clearValidation()
                }
            case 'Forms Menu':
                if(isHidden == false){
                    clearValidation()
                }
            break;  
        }
    }   
    $('#idptp_sec').change(function() {
        var myVal = $(this).val();
        checkPageType(myVal);
    });
    //perform initial check
    var initVal = $('#idptp_sec').val();
    checkPageType(initVal);
});
</script>
于 2013-01-26T14:09:47.270 に答える