попробуйте выполнить: (case1)
((BaseClass)(new InheritedClass())).DoIt()
Edit: virtual + override разрешены во время выполнения (поэтому переопределение действительно отменяет виртуальные методы), а новые просто создают новый метод с тем же именем и скрывает старый, он разрешен во время компиляции -> ваш компилятор вызовет метод, который он видит '
(function () {
var oldVal;
$('#name').on('change textInput input', function () {
var val = this.value;
if (val !== oldVal) {
oldVal = val;
checkLength(val);
}
});
}());
Это приведет к улавливанию change
, нажатия клавиш, paste
, textInput
, input
(если доступно). И не стрелять больше, чем необходимо.
http://jsfiddle.net/katspaugh/xqeDj/
Ссылки:
textInput
- тип события W3C DOM Level 3. http://www.w3.org/TR/DOM-Level-3-Events/#events-textevents
Пользовательский агент должен отправить это событие, когда один или более символов. Эти символы могут исходить из множества источников, например символов, возникающих в результате нажатия или отпускания ключа на клавиатурном устройстве, обработки обработки редактора метода ввода или в результате голосовой команды. Если операция «вставить» генерирует простую последовательность символов, т. Е. Текстовый проход без какой-либо информации о структуре или стиле, этот тип события также должен быть сгенерирован.
blockquote>
input
- Тип события HTML5 .Уволен в элементах управления, когда пользователь меняет значение
blockquote>Firefox, Chrome, IE9 и другие современные браузеры.
Это событие происходит сразу после модификации, в отличие от события onchange, которое происходит, когда элемент теряет фокус.
blockquote>
Вам нужно будет использовать комбинацию onkeyup
и onclick
(или onmouseup
), если вы хотите поймать любую возможность.
<input id="name" onkeyup="checkLength(this.value)" onmouseup="checkLength(this.value)" />
setTimeout
и периодически проверять значение поля ... Что именно вы хотите сделать?
– DaveRandom
18 August 2011 в 12:04
Вы можете использовать onkeyup
<input id="name" onkeyup="checkLength(this.value)" />
Вот еще одно решение, которое я разрабатываю для той же проблемы. Однако я использую много полей ввода, поэтому сохраняю старое значение как определяемый пользователем атрибут самих элементов: «data-value». Использование jQuery так легко управлять.
$(document).delegate('.filterBox', 'keyup', { self: this }, function (e) {
var self = e.data.self;
if (e.keyCode == 13) {
e.preventDefault();
$(this).attr('data-value', $(this).val());
self.filterBy(this, true)
}
else if (e.keyCode == 27) {
$(this).val('');
$(this).attr('data-value', '');
self.filterBy(this, true)
}
else {
if ($(this).attr('data-value') != $(this).val()) {
$(this).attr('data-value', $(this).val());
self.filterBy(this);
}
}
});
здесь, я использовал 5-6 полей ввода, имеет класс filterBox, я делаю метод filterBy, только если значение данных отличается от собственного значение.
<input type="text" id="name" name="name"/>
$('#name').keyup(function() {
alert('Content length has changed to: '+$(this).val().length);
});
Как расширение к ответу на katspaugh, вот способ сделать это для нескольких элементов, используя класс css.
$('.myclass').each(function(){
$(this).attr('oldval',$(this).val());
});
$('.myclass').on('change keypress paste focus textInput input',function(){
var val = $(this).val();
if(val != $(this).attr('oldval') ){
$(this).attr('oldval',val);
checkLength($(this).val());
}
});
textInput
в Chrome 15, и он работает. Я проверил событиеinput
в IE9, и он тоже работает. Firefox должен поддерживатьDOMAttrModified
, но у меня его нет. Эти два события - лучшее, на что вы можете надеяться, поскольку они срабатывают при любом вводе текста. – katspaugh 18 August 2011 в 12:28