我的代码中有一个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();
});
答案 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')
命名空间中的所有事件。