我有以下函数,仅允许在文本框中输入数字字符。它与其他全局函数一起位于 common.js 内部。
function isNumberKey(evt) {
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode != 46 && charCode > 31
&& (charCode < 48 || charCode > 57))
return false;
return true;
}
现在,在另一个 javascript 文件中,我有以下代码,我想要实现的是将文本框 mobilenumber 的按键事件绑定(bind)到位于 common.js 文件中的上述函数,我已对此进行了引用common.js如下:
/// <reference path="common.js" />
window.onload = function () {
document.getElementById('mobilenumber').keypress = isNumberKey(this.keypress);
};
但是我收到的错误是
isNumberKey is not defined $('mobilenumber').keypress = isNumberKey(this.keypress);
当我查看源代码以检查命名约定时,它是这样呈现的:
<input id="mobilenumber" class="form-control" type="text" value="" placeholder="Your Mobile Number" name="MobileNumber" data-val-maxlength-max="15" data-val-maxlength="Mobile number can not be longer then 15 characters" data-val="true">
我不知道我哪里出了问题?任何帮助将不胜感激。
更新
好的,我将两个 javascript 文件移动到一个名为 common 的文件中,如下所示:
$(document).ready(function () {
document.getElementById('mobilenumber').keypress = isNumberKey(this.keypress);
function isNumberKey(evt) {
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
return true;
}
});
当页面加载而不是绑定(bind)它时,它会调用它,这会给我一个错误,说 evt if undefined ,我理解这是因为没有输入任何内容,为什么它调用它?我怎样才能绑定(bind)它而不需要调用它?
最佳答案
尝试
$("#mobilenumber").on("input", function(e) {
return $(this).prop("value", function(_, val) {
return val.replace(/[^\d]/, "").slice(0, 15)
})
});
$("#mobilenumber").on("input", function(e) {
return $(this).prop("value", function(_, val) {
return val.replace(/[^\d]/, "").slice(0, 15)
})
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="mobilenumber" class="form-control" type="text" value="" placeholder="Your Mobile Number" name="MobileNumber" data-val-maxlength-max="15" data-val-maxlength="Mobile number can not be longer then 15 characters" data-val="true">
关于javascript - window.load 上单独的 javascript 文件内的引用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28790293/