У меня есть следующий jQuery с намерением заменить предупреждение пользовательским кодом проверки для того, что было введено в текстовое поле:
$(document).on("change", '[id$=txtbxSSNOrITIN]', function () {
alert('the textbox change event occurred');
});
Однако событие срабатывает/предупреждение отображается только тогда, когда «текстовое поле» теряет фокус. Ввод значения не вызывает событие; только выход из элемента управления/элемента запускает событие.
Должен ли я использовать другое событие (кроме «изменения») или как я могу фиксировать каждое изменение содержимого?
Я не хочу, чтобы пользователь ввел «Warble P. McGokle», а затем, только после того, как он выйдет из табуляции или щелкнет в другом месте, сообщите ему/ей/ему, что введенное значение недействительно. Это верный способ поместить мою фотографию в центр мишени для дротиков компании.
ОБНОВИТЬ
В jsfiddle у меня работал скрипт tymeJV; на самом деле, я изменил его на:
$(document).on("input", "textarea", function() {
alert('you entered ' + this.value);
});
... но это не работает для меня (в моем проекте/веб-части):
$(document).on("input", '[id$=txtbxSSNOrITIN]', function () {
alert('the textbox input event occurred');
});
(Я не вижу предупреждений при вводе значений в текстовый элемент)
Для контекста/полного раскрытия вот весь мой 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», и я отмечу его как правильный.