如何在IE8中取消绑定jquery插件

时间:2015-07-14 16:37:16

标签: javascript jquery internet-explorer-8

我的代码中有一个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();
});

1 个答案:

答案 0 :(得分:1)

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

$(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')命名空间中的所有事件。