0

jQuery 1.7.2 を使用しています。

フォームの送信を妨げたくありません。すべての入力に対して無効な属性をシミュレートしたいと考えています。この属性を追加および削除する可能性があります。

入力と送信を含むフォームがあります:

<form name="login" id="login" method="post" action="">
    <label>Password</label>
    <input class="text" id="password" name="password" />
    <button type="submit">Login</button>
</form>

ページのさらに下には、ログインフォームに入力しない限りブロックしたい別のフォームがあります。

<form id="form" method="post" action="">
    <label>Enter Phone Number</label>
    <input id="areacode" name="areacode" maxlength="3" class="required number" type="text" pattern="[0-9]*" />
    <input id="phoneone" name="phoneone" maxlength="3" class="required number" type="text" pattern="[0-9]*" />
    <input id="phonetwo" name="phonetwo" maxlength="4" class="required number" type="text" pattern="[0-9]*" />
    <button id="phone_submit" type="submit">Next</button>
</form>

ここで、ユーザーがこのフォームに記入するのではなく、送信しないようにしたいと考えています。バックエンドは、JavaScript などを無効にするとブロックします。また、バックエンドは、有効な送信時に最初のフォームの入力フィールドに「読み取り専用」属性を送信しています。

したがって、jQuery は基本的に、最初のフォーム入力が読み取り専用かどうかを確認し、そうでない場合は他のフォームを無効にすることができます。非表示にしたくありません。すべてのフィールドとボタンを無効にしたいだけです。

このようなことを実行できるプラグイン、または少なくとも最初のフォームの入力フィールドをチェックできる jquery 関数がすでに存在している必要があると思います。これまでのところ、私は持っています:

<script type="text/javascript">
    $(window).load(function(){
        if $('#password').attr('readonly',true){
            $('#areacode').attr('disabled',true);
            $('#phoneone').attr('disabled',true);
            $('#phonetwo').attr('disabled',true);
            $('#phone_submit').attr('disabled',true);
    };
</script>
4

3 に答える 3

0

これは、単純なifステートメントと、オーバーレイの表示と非表示を使用して行いました。最初は無効な属性を追加して行いましたが、オーバーレイが必要だったため、両方の方法で行うのは意味がありませんでした。

一部の人が望むほどセマンティックではありませんが、完全に機能します。以下のコードは、読みやすくするためのインラインスタイルです。

Soooooo .... html:

<form>
    <input id="password" type="text" />
    <button type="submit">Submit</button>
</form>
<fieldset style="position: relative;">
    <div class="overlay" style="width:100%;height:100%; position: absolute; top:0; left:0; background: rgba(0,0,0,0.5); color: #fff;">You must fill out the password above.</div>
    <form></form>
</fieldset>

js:

<script type="text/javascript">
    $(document).ready(function() {
        var block = false;
        if ($('#password').attr('readonly')) {
            block = false;
        } else {
            block = true;
        }
        if (block) {
            $('.overlay').css('display','block');
        }
    });
</script>

これで、バックエンドがパスワードを読み取り専用にするときに、フィールドセットのフォームを使用できます。#password入力に読み取り専用属性がない場合、フォームは事実上ブロックされます。もちろん、いつものように、誰かがファイアバグなどでオーバーレイを消去することにした場合に備えて、フォームの送信を防ぐバックエンドコードがあります。

ご協力いただきありがとうございます。

于 2012-08-10T19:51:00.573 に答える
0

または、次を使用してこれを実現できます。

$('#divID').modal().show();
$('#divID').modal().close();

http://www.ericmmartin.com/projects/simplemodal/

于 2012-08-03T19:34:51.910 に答える
0

少し似ているフォーム処理で何か新しいことを試しましたが、必要に応じて、他のフィールドに基づいて要素を表示または非表示にします。幸いなことに、私は怠け者なので、その動作を変更するには、2 行のコードを変更するだけで済みます。

これはまだ非常に基本的なものであり、適切にテストされていませんが、私のサイト http://geuze.name/html5form/html5form.relate.jsでソースを見つけることができます(125 行と 127 行を変更してください) 。

http://geuze.name/html5form/の html5form ポリフィルと一緒の簡単なデモ

正確に必要なものでなくても、コードは正しい方向に考えるのに役立つかもしれません.

edit 明らかな怠惰なサーバーのためコードを追加 ;)

/*
 *  Form Relationship Plugin - jQuery plugin
 *  Version 0.2
 * 
 * Built for the jQuery library
 * http://jquery.com
 * 
 * Plugin allows you to easily add smart relations between form fields and other elements
 * 
 *
 */

(function($){
    $.fn.relate = function(options){
        // Uncomment string below during testing
        "use strict";
        var tmp = {},
        // Default configuration properties
            defaults = {
                scoreRequired: 1,
                scoreOnTrue: 1,
                scoreOnFalse: 0,
                globalScope: true,
                debug: false
            },
            callbacks = {
                oninitialize:  function(){},// Runs once per form
                onfinish:      function(){}// Runs once after no errors
            },
            opts = $.extend(
                    {},
                    defaults,
                    callbacks,
                    options
            );
        // Force debug false on sucky browsers
        if(typeof(console)  === 'undefined' || typeof(console.info)  === 'undefined'){
            opts.debug = false;
        }
        // Our debug output
        function debug(str){
            if(opts.debug === true){
                console.info(str);
            }
        };
        // Helper function to determine object size
        function objSize(obj) {
            var size = 0, key;
            for (key in obj) {
                if (obj.hasOwnProperty(key)) size++;
            }
            return size;
        };

        // Update per element
        // Easier would be to always loop over everything, but I assume this is faster
        function update(form){
            var related,
                currentScore = 0,
                scoreOnTrue = 1,
                scoreOnFalse = 0;

            // Reset score
            $('[data-currentscore]').removeAttr('data-currentscore');
            // Loop all possible smart elements
            $('select[data-relate], select:has(option[data-relate]), input[data-relate], textarea[data-relate]', form).each(function(){
                if($(this).is('select')){
                    $('option', this).each(function(){
                        // Find relation
                        related = $(this).attr('data-relate');
                        // If no relation, no points to anything
                        if(!related || related.length  0 ? $(this).attr('data-scoreontrue') * 1 : opts.scoreOnTrue;
                        scoreOnFalse = $(this).filter('[data-scoreonfalse]').length > 0 ? $(this).attr('data-scoreonfalse') * 1 : opts.scoreOnFalse;
                        if($(this).is(':selected')){
                            $(related).each(function(){
                                currentScore = $(this).filter('[data-currentscore]').length > 0 ? $(this).attr('data-currentscore') * 1 : 0;
                                $(this).attr('data-currentscore', currentScore + scoreOnTrue);
                            });
                        } else {
                            $(related).each(function(){
                                currentScore = $(this).filter('[data-currentscore]').length > 0 ? $(this).attr('data-currentscore') * 1 : 0;
                                $(this).attr('data-currentscore', currentScore - scoreOnFalse);
                            });
                        }
                    });
                } else {
                    // Find relation
                    related = $(this).attr('data-relate');
                    // If no relation, no points to anything
                    if(!related ||related.length  0  ? $(this).attr('data-scoreontrue') * 1 : opts.scoreOnTrue;
                    scoreOnFalse = $(this).filter('[data-scoreonfalse]').length > 0  ? $(this).attr('data-scoreonfalse') * 1 : opts.scoreOnFalse;
                    if($(this).is('input:radio') || $(this).is('input:checkbox')){
                        if($(this).is(':checked')){
                            $(related).each(function(){
                                currentScore = $(this).filter('[data-currentscore]').length > 0 ? $(this).attr('data-currentscore') * 1 : 0;
                                $(this).attr('data-currentscore', currentScore + scoreOnTrue);
                            });
                        } else {
                            $(related).each(function(){
                                currentScore = $(this).filter('[data-currentscore]').length > 0 ? $(this).attr('data-currentscore') * 1 : 0;
                                $(this).attr('data-currentscore', currentScore + scoreOnFalse);
                            });
                        }
                    } else if($(this).val() !== '' && $(this).val() != $(this).attr('placeholder')){
                        $(related).each(function(){
                            currentScore = $(this).filter('[data-currentscore]').length > 0 ? $(this).attr('data-currentscore') * 1 : 0;
                            $(this).attr('data-currentscore', currentScore + scoreOnTrue);
                        });
                    } else {
                        $(related).each(function(){
                            currentScore = $(this).filter('[data-currentscore]').length > 0 ? $(this).attr('data-currentscore') * 1 : 0;
                            $(this).attr('data-currentscore', currentScore + scoreOnFalse);
                        });
                    }
                }
            });
            // Finaly loop over all fields with some sort of score
            $('[data-currentscore]').each(function(){
                var scoreRequired = $(this).has('[data-scorerequired]') ? $(this).attr('data-scorerequired') * 1 : opts.scoreRequired;
                if($(this).attr('data-currentscore') * 1 >= scoreRequired * 1){
                    $(this).show();
                } else {
                    $(this).hide();
                }
            });

        };

        // Loop over all forms requested
        this.each(function(){
            // Private properties
            var form = $(this);

            // Init / change / keyup(fixes some browsers on select)
            update(form);
            $('select[data-relate], select:has(option[data-relate]), input[data-relate], textarea[data-relate]')
            .change(function(){
                update(form);
            }).keyup(function(){
                update(form);
            });
        });
        return this;
    }
})(jQuery);

使用方法は次のとおりです: $('form').relate({...});およびいくつかの html データ属性

于 2012-08-03T19:45:11.030 に答える