1

入力ボックスにスペースを入力すると「スペースは許可されていません」と警告するという技術的な問題がありますが、スペースバーを使用してアラートを閉じることもできるため、キーを押すとすぐに消えます。したがって、スペースバーを押したままにしない限り、アラートは点滅してから消えます。誰かがこの問題を解決する方法を理解できますか?ありがとう。

$('#email').bind('DOMAttrModified textInput input change keypress paste',function(){  

   if($(this).val().match(/[\s]/g)) {
     alert("email should not contain spaces");
   } 
});   
4

3 に答える 3

1

これを試すことができます:

アラートバインドを表示する前keydowndocument

alert("email should not contain spaces")
$('document').keydown(function(event) {
        if (event.keyCode == 32) {
            event.preventDefault();
        }
    });

ユーザーが入力をクリックまたは入力すると、これをアンバインドします。

アラートを表示する代わりに、このような通知プラグインを使用することもお勧めします。

于 2013-03-22T16:34:36.943 に答える
1

JavaScript モーダルを使用する代わりに、独自のモーダルを作成できます。jQuery UI ダイアログを使用することもできますが、それほど難しくありません。

また、これらのさまざまな種類のイベントのすべてにバインドしているという事実により、一部のイベントが不適切に複数回発生する可能性があります。単純なデータ フラグを使用して、既にユーザーに警告を行っているかどうかを確認できます。

$('#email').bind('DOMAttrModified textInput input change keypress paste', function (e) {
    var $this = $(this);
    if ($this.val().match(/[\s]/g) && !$this.data('spacedout')) {
        $this.data('spacedout', true);
        $("<div>").appendTo("body").css({
            position: 'fixed',
            width: '100%',
            height: '100%',
            backgroundColor: 'black',
            opacity: '0.7',
            top: 0,
            left: 0
        }).append($("<div style='color: red;'>Spaces not allowed<br><input type=submit value=OK></div>").on('click', function () {
            $this.data('spacedout', false).trigger('focus');
            $(this).parent().remove();
        }));
        $this.trigger('blur');
    }
});

http://jsfiddle.net/ExplosionPIlls/HwYdF/

于 2013-03-22T16:39:44.943 に答える
1

目立たない検証方法を使用することをお勧めします。これは、 colorboxのようなもので非常に簡単に行うことができます(ただし、これはまだやや目障りですが、できればコントロールのフォーカスを離れないことが理想です!*)。ユーザーを苛立たせることなく、好きなだけ単純にすることも複雑にすることもできます。古風なモーダル ダイアログ ボックスで頭がいっぱいになり、半分死にます。例えば:

$.colorbox( html: '<p>Your message</p>', show: true );

* 私がしなければならないことを検索する際にnotyが表示されるのをよく見かけます。それまでは保証できませんが、「インライン検証」に使用できるようなものとして提供できます。

于 2013-03-22T16:36:40.013 に答える