如何在 IE8 中解绑 jquery 插件

How to unbind a jquery plugin in IE8

我的代码中有一个 jquery 插件,它将强制输入框只接受数字输入,但在某些时候我必须禁用它并使其也接受字母。我不能使用 unbind() 因为它也会解除绑定其他功能。任何帮助将不胜感激,谢谢。

这是我的 jsfiddle https://jsfiddle.net/mpr73v9w/ 下面是我的代码。

<input type="text">
<button>Button</button>

$.fn.ForceNumericOnly = function () {
    return this.each(function () {
        $(this).keydown(function (e) {
            var key = e.charCode || e.keyCode || 0;

            if (e.shiftKey) {
                e.preventDefault();
            }

            // allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY
            return (
                key == 8 ||
                key == 9 ||
                key == 13 ||
                key == 46 ||
                (key >= 37 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));
        });
    });
};

$("input").ForceNumericOnly();

$("button").click(function() {
    $('input').ForceNumericOnly.destroy();
});

您可以使用允许事件命名空间的 $.on() 方法,而不是使用命名事件方法 $.keydown()

$(this).on('keydown.forcenumericonly', function(e) { 
    // handle event
});

这样可以轻松解除特定事件的绑定,而不会影响其他功能。使用 .off() 方法执行此操作。

$.fn.ForceNumericOnly.destroy = function () {
    $(this).off('.forcenumericonly');
};

您可以仅解除 keydown 事件与 $(this).off('keydown.forcenumericonly') 的绑定,或者如示例中那样解除 forcenumericonly 命名空间中与 $(this).off('.forcenumericonly').

的所有事件的绑定