0

実行時に検証クラスを変更するための以下のコードがあります

$("#txtNewAttributes").focusout(function () {
        var attributeTextBox = $("#txtNewAttributes").val()
        if ($.trim(attributeTextBox) == "Height")
            $(txtNewValues).removeClass('alphaonly').addClass('numbersonly');
        if ($.trim(attributeTextBox) == "IATA" || $.trim(attributeTextBox) == "IACA")
            $(txtNewValues).removeClass('numbersonly').addClass('alphaonly');
    });

そして、予想通り、firebugで見られるようにクラス名が変更されます。しかし、Numberonlyクラスは適用されておらず、関数はアウトオブスコープであるため機能していません。以下の関数としてdiffファイルにあると思いました。

function AllowOnlyNumbers() {
    $('.numbersonly').each(function (e) {
        $(this).keydown(function (e) {
            var key = e.charCode || e.keyCode || 0;
            return (key == 8 || key == 9 || key == 46 || (key >= 37 && key <= 40) ||
                     (key >= 48 && key <= 57) || (key >= 96 && key <= 105));
        });
    });
}

JqueryのfocusoutFuncで上記の関数にアクセスするにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

私が正しく理解していれば、最初にkeydownハンドラーを登録し、次に、に入力された値に応じて、txtNewAttributesのクラスを設定しますtxtNewValueskeydownハンドラーは、登録時にセレクターに一致する要素にのみ適用されるため、これは実際には機能しません。

現在および将来の現在のセレクターに一致するすべての要素のイベントハンドラーをアタッチするには、を使用しますjQuery.live()

$('.numbersonly').live('keydown', function (e) {
    var key = e.charCode || e.keyCode || 0;
    return (key == 8 || key == 9 || key == 46 || (key >= 37 && key <= 40) ||
           (key >= 48 && key <= 57) || (key >= 96 && key <= 105));
});
于 2013-03-05T07:13:20.243 に答える