我如何才能挂接到 HTML 文本框(输入类型文本)的真实 "OnChanged" 事件?
How can I hook into a true "OnChanged" event for an HTML Textbox (Input type Text)?
我有以下 jQuery,目的是用文本框中输入的自定义验证代码替换警报:
$(document).on("change", '[id$=txtbxSSNOrITIN]', function () {
alert('the textbox change event occurred');
});
但是,仅当 "textbox" 失去焦点时才会看到事件 fires/the 警报。输入值不会调用事件;仅离开 control/element 会触发事件。
我应该使用另一个事件("change" 以外的事件)或者我如何捕捉内容的每次变化?
我不想让用户输入 "Warble P. McGokle" 然后,只有在他们跳出或单击其他地方后,才告诉 him/her/it 输入的值无效。这是将我的面部照片贴在公司飞镖板中心的绝妙方法。
更新
在 jsfiddle 中,tymeJV 的脚本对我有用;实际上,我将其更改为:
$(document).on("input", "textarea", function() {
alert('you entered ' + this.value);
});
...但这对我不起作用(在我的 project/WebPart 中):
$(document).on("input", '[id$=txtbxSSNOrITIN]', function () {
alert('the textbox input event occurred');
});
(我在文本元素中输入 vals 时没有看到任何警报)
对于 context/full 披露,这是我的全部 jQuery(在我的 *.ascs 文件的末尾):
<script type="text/javascript">
$(document).ready(function () {
console.log('The ready function has been reached'); /* This is a "sanity check" so it can be verified that this jQuery script
is running/ran */
});
/* When "Employee" checkbox changes state, set up txtbxSSNOrITIN accordingly */
$(document).on("change", '[id$=ckbxEmp]', function () {
var ssnmaxlen = 4;
var itinmaxlen = 12;
var ssntextboxwidth = 40;
var itintextboxwidth = 100;
var ckd = this.checked;
var $input = $('[id$=txtbxSSNOrITIN]');
var $lbl = $('[id$=lblSSNOrITIN]');
if (ckd) $input.data("oldValue", $input.val()); // Remember current value
$input.prop("maxlength", ckd ? ssnmaxlen : itinmaxlen).css({
background: ckd ? 'yellow' : 'lightgreen',
width: ckd ? ssntextboxwidth : itintextboxwidth
}).val(function (i, v) {
/* If checked, trim textbox contents to ssnmaxlen characters */
return ckd && v.length > ssnmaxlen ? v.slice(0, ssnmaxlen) : $input.data("oldValue");
});
$lbl.text(ckd ? "SSN - last 4 digits" : "ITIN");
/* This sets focus to the end of the textbox (multiplication by 2 is because some characters are counted as two) */
var strLength = $input.val().length * 2;
$input.focus();
$input[0].setSelectionRange(strLength, strLength);
});
$(document).on("input", '[id$=txtbxSSNOrITIN]', function () {
alert('the textbox input event occurred');
});
</script>
不过,将事件从 "input" 更改为 "keyup" 效果很好,因此将 tymeJV 的脚本与评论中的各种建议结合使用会产生奇迹。将您的答案更改为 "keyup",我会将其标记为 correctamundo。
您可以将 input
用于只要修改输入(通过粘贴、击键等)就会触发的事件
$(document).on("input", '[id$=txtbxSSNOrITIN]', function () {
我有以下 jQuery,目的是用文本框中输入的自定义验证代码替换警报:
$(document).on("change", '[id$=txtbxSSNOrITIN]', function () {
alert('the textbox change event occurred');
});
但是,仅当 "textbox" 失去焦点时才会看到事件 fires/the 警报。输入值不会调用事件;仅离开 control/element 会触发事件。
我应该使用另一个事件("change" 以外的事件)或者我如何捕捉内容的每次变化?
我不想让用户输入 "Warble P. McGokle" 然后,只有在他们跳出或单击其他地方后,才告诉 him/her/it 输入的值无效。这是将我的面部照片贴在公司飞镖板中心的绝妙方法。
更新
在 jsfiddle 中,tymeJV 的脚本对我有用;实际上,我将其更改为:
$(document).on("input", "textarea", function() {
alert('you entered ' + this.value);
});
...但这对我不起作用(在我的 project/WebPart 中):
$(document).on("input", '[id$=txtbxSSNOrITIN]', function () {
alert('the textbox input event occurred');
});
(我在文本元素中输入 vals 时没有看到任何警报)
对于 context/full 披露,这是我的全部 jQuery(在我的 *.ascs 文件的末尾):
<script type="text/javascript">
$(document).ready(function () {
console.log('The ready function has been reached'); /* This is a "sanity check" so it can be verified that this jQuery script
is running/ran */
});
/* When "Employee" checkbox changes state, set up txtbxSSNOrITIN accordingly */
$(document).on("change", '[id$=ckbxEmp]', function () {
var ssnmaxlen = 4;
var itinmaxlen = 12;
var ssntextboxwidth = 40;
var itintextboxwidth = 100;
var ckd = this.checked;
var $input = $('[id$=txtbxSSNOrITIN]');
var $lbl = $('[id$=lblSSNOrITIN]');
if (ckd) $input.data("oldValue", $input.val()); // Remember current value
$input.prop("maxlength", ckd ? ssnmaxlen : itinmaxlen).css({
background: ckd ? 'yellow' : 'lightgreen',
width: ckd ? ssntextboxwidth : itintextboxwidth
}).val(function (i, v) {
/* If checked, trim textbox contents to ssnmaxlen characters */
return ckd && v.length > ssnmaxlen ? v.slice(0, ssnmaxlen) : $input.data("oldValue");
});
$lbl.text(ckd ? "SSN - last 4 digits" : "ITIN");
/* This sets focus to the end of the textbox (multiplication by 2 is because some characters are counted as two) */
var strLength = $input.val().length * 2;
$input.focus();
$input[0].setSelectionRange(strLength, strLength);
});
$(document).on("input", '[id$=txtbxSSNOrITIN]', function () {
alert('the textbox input event occurred');
});
</script>
不过,将事件从 "input" 更改为 "keyup" 效果很好,因此将 tymeJV 的脚本与评论中的各种建议结合使用会产生奇迹。将您的答案更改为 "keyup",我会将其标记为 correctamundo。
您可以将 input
用于只要修改输入(通过粘贴、击键等)就会触发的事件
$(document).on("input", '[id$=txtbxSSNOrITIN]', function () {