0

ユーザーが入力フィールドのテキストフィールドに入力を開始すると、「送信」ボタンを有効にする次のスクリプトを定義しました:-

<script type = "text/javascript">
    $("input[type= 'text']").change(function () {

        var $this = $("input[type='submit']");
        $this.prop('disabled', false);
    });
</script>

しかし、ユーザーがテキスト フィールドに入力するたびに送信ボタンを有効にするのは処理の無駄になるため、上記のスクリプトを強制的に 1 回だけ起動することはできます。送信ボタンは最初の.change. ブラジル

4

2 に答える 2

3

$('<selector>').change(...)イベントハンドラーを各要素にバインドするため、.one [docs]を使用するだけではここでは役に立ちません。どの要素によってトリガーされたかを無視して、1回だけ実行したい場合でも、要素ごとに1回実行されます。

イベントハンドラーは、一度実行された後、各要素から実行できますunbind(または実行できます)。off

var $elements = $("input[type= 'text']");
$("input[type= 'text']").change(function() {
    //...
    $elements.unbind('change');
});

これは簡単にプラグインに変えることができます(単純なバージョン、元の.one()メソッドのシグネチャはもう少し複雑です):

$.fn.one_all = function(event, handler) {
    var $elements = this;
    $elements.on(event, function() {
        $elements.off(event, handler);
        handler.apply(this, arguments);
    });
};
于 2012-05-06T16:43:34.577 に答える
3
$("input[type='text']").one('change', function () { // fires only one time
        var $this = $("input[type='submit']");
        $this.prop('disabled', false);
        $("input[type='text']").off('change');
    })
于 2012-05-06T16:39:13.380 に答える