Onchange JavascripT Не работает должным образом [дублировать]

попробуйте выполнить: (case1)

((BaseClass)(new InheritedClass())).DoIt()

Edit: virtual + override разрешены во время выполнения (поэтому переопределение действительно отменяет виртуальные методы), а новые просто создают новый метод с тем же именем и скрывает старый, он разрешен во время компиляции -> ваш компилятор вызовет метод, который он видит '

65
задан Sachin Midha 18 August 2011 в 12:17
поделиться

6 ответов

(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

Пользовательский агент должен отправить это событие, когда один или более символов. Эти символы могут исходить из множества источников, например символов, возникающих в результате нажатия или отпускания ключа на клавиатурном устройстве, обработки обработки редактора метода ввода или в результате голосовой команды. Если операция «вставить» генерирует простую последовательность символов, т. Е. Текстовый проход без какой-либо информации о структуре или стиле, этот тип события также должен быть сгенерирован.

input - Тип события HTML5 .

Уволен в элементах управления, когда пользователь меняет значение

Firefox, Chrome, IE9 и другие современные браузеры.

Это событие происходит сразу после модификации, в отличие от события onchange, которое происходит, когда элемент теряет фокус.

100
ответ дан ChrisF 17 August 2018 в 18:52
поделиться
  • 1
    его не работает ... вы проверили свой код в конце? он работал над выбором из автозаполнения ...? – Sachin Midha 18 August 2011 в 12:25
  • 2
    Я проверил textInput в Chrome 15, и он работает. Я проверил событие input в IE9, и он тоже работает. Firefox должен поддерживать DOMAttrModified, но у меня его нет. Эти два события - лучшее, на что вы можете надеяться, поскольку они срабатывают при любом вводе текста. – katspaugh 18 August 2011 в 12:28
  • 3
    Удивительное решение .... вход работал для меня как благословение ... ничего, кроме ввода, необходимо, что сам работает достаточно. он работает на ff4, но не на 3.x, & amp; У меня было 3,6 на моем рабочем столе и amp; он никогда не работал ... – Sachin Midha 18 August 2011 в 12:43
  • 4
    – Paul D. Waite 11 September 2013 в 17:03
  • 5
    Для того, чтобы сохранить обновление, в настоящее время это решение срабатывает несколько раз при однократном изменении входа в FF22, вам не нужно использовать события нажатия клавиш или textinput, для ввода и изменения свойств должно быть достаточно – cyber-guard 28 January 2014 в 20:07

Вам нужно будет использовать комбинацию onkeyup и onclick (или onmouseup), если вы хотите поймать любую возможность.

<input id="name" onkeyup="checkLength(this.value)" onmouseup="checkLength(this.value)" />
0
ответ дан DaveRandom 17 August 2018 в 18:52
поделиться
  • 1
    хорошая проблема, но проблема здесь в том, что я не нажимаю кнопку мыши на элементе ввода, а на автокомплексе, который не будет запускать это событие ... – Sachin Midha 18 August 2011 в 12:01
  • 2
    Единственное, что я могу придумать, и это неприятно противно, это setTimeout и периодически проверять значение поля ... Что именно вы хотите сделать? – DaveRandom 18 August 2011 в 12:04
  • 3
    Это очень неприятно ...: D что-то похожее на то, что делает индикатор силы пароля, он говорит вам о силе пароля, когда вы продолжаете входить в него. Я хочу включить кнопку только в том случае, если введенная строка имеет длину 10, иначе она будет отключена. Надеюсь, вы поняли ... – Sachin Midha 18 August 2011 в 12:07

Вы можете использовать onkeyup

<input id="name" onkeyup="checkLength(this.value)" />
0
ответ дан Dogbert 17 August 2018 в 18:52
поделиться
  • 1
    Я использовал onkeyup ... но моя проблема в том, когда пользователь выбирает из автозаполнения браузера, то это событие не срабатывает ... Я уже написал это в своем вопросе в обходном решении, которое я использовал ... – Sachin Midha 18 August 2011 в 11:57

Вот еще одно решение, которое я разрабатываю для той же проблемы. Однако я использую много полей ввода, поэтому сохраняю старое значение как определяемый пользователем атрибут самих элементов: «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, только если значение данных отличается от собственного значение.

0
ответ дан efirat 17 August 2018 в 18:52
поделиться

Сделайте это способом jQuery:

<input type="text" id="name" name="name"/>


$('#name').keyup(function() {
  alert('Content length has changed to: '+$(this).val().length);
});
2
ответ дан powtac 17 August 2018 в 18:52
поделиться
  • 1
    Это также будет срабатывать только тогда, когда поле теряет фокус. – Felix Kling 18 August 2011 в 11:35
  • 2
    @Felix Kling, правда, изменил его на keyup ();) – powtac 18 August 2011 в 11:39
  • 3
    снова та же проблема с keyup ... Я использовал его & amp; У меня была проблема с этим. прочитайте мой полный вопрос. – Sachin Midha 18 August 2011 в 11:58

Как расширение к ответу на 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());
        }
    });
7
ответ дан SSZero 17 August 2018 в 18:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: