Zdarzenie wywołane przy czyszczeniu tekstu w IE10 z ikoną clear

W chrome Zdarzenie "Szukaj" jest wywoływane przy wejściach wyszukiwania, Gdy użytkownik kliknie przycisk Wyczyść.

Czy istnieje sposób na uchwycenie tego samego Zdarzenia w javascript w Internet Explorer 10?

Tutaj wpisz opis obrazka

Author: ghusse, 2013-01-24

9 answers

Jedyne rozwiązanie, które w końcu znalazłem:

// There are 2 events fired on input element when clicking on the clear button:
// mousedown and mouseup.
$("input").bind("mouseup", function(e){
  var $input = $(this),
      oldValue = $input.val();

  if (oldValue == "") return;

  // When this event is fired after clicking on the clear button
  // the value is not cleared yet. We have to wait for it.
  setTimeout(function(){
    var newValue = $input.val();

    if (newValue == ""){
      // Gotcha
      $input.trigger("cleared");
    }
  }, 1);
});
 72
Author: ghusse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-24 10:20:51

Zdarzenie oninput zostanie wywołane z {[1] } ustawionym na pusty łańcuch. To rozwiązało problem dla mnie, ponieważ chcę wykonać tę samą akcję, czy wyczyścić pole wyszukiwania za pomocą X lub Backspace. Działa to tylko w IE 10.

 40
Author: Lucent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-21 05:40:33

Zamiast tego użyj input. Działa z takim samym zachowaniem we wszystkich przeglądarkach.

$(some-input).on("input", function() { 
    // update panel
});
 32
Author: Jeffry Ureña Miranda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-02 21:40:11

Dlaczego nie

$("input").bind('input propertychange', function() {
    if (this.value == ""){
      $input.trigger("cleared");
    }
});
 10
Author: Ertug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-29 19:09:01

Zdaję sobie sprawę, że na to pytanie udzielono odpowiedzi, ale przyjęta odpowiedź nie zadziałała w naszej sytuacji. IE10 nie rozpoznał / wystrzelił $input.trigger("cleared");.

Nasze ostateczne rozwiązanie zastąpiło tę instrukcję zdarzeniem keydown w kluczu ENTER (kod 13). Dla potomności, to działa w naszym przypadku:

$('input[type="text"]').bind("mouseup", function(event) {
    var $input = $(this);
    var oldValue = $input.val();
    if (oldValue == "") {
        return;
    }
    setTimeout(function() {
        var newValue = $input.val();
        if (newValue == "") {
            var enterEvent = $.Event("keydown");
            enterEvent.which = 13;
            $input.trigger(enterEvent);
        }
    }, 1);
});

Ponadto chcieliśmy zastosować to powiązanie tylko do wejść "Szukaj", a nie do każdego wejścia na stronie. Oczywiście, IE uczynił to trudne, jak również... chociaż mamy zakodowane <input type="search"...>, tj. renderował je jako type="text". Dlatego selektor jQuery odwołuje się do type="text".

Zdrówko!
 8
Author: OrangeWombat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-09 17:01:10

Możemy po prostu posłuchać input wydarzenia. Proszę zobaczyć odniesienie Aby uzyskać szczegółowe informacje. W ten sposób naprawiłem problem z przyciskiem wyczyść w Sencha ExtJS na IE:

Ext.define('Override.Ext.form.field.ComboBox', {
    override: 'Ext.form.field.ComboBox',

    onRender: function () {
        this.callParent();

        var me = this;
        this.inputEl.dom.addEventListener('input', function () {
            // do things here
        });
    }
});
 6
Author: jaselg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-09 07:08:16

Wyjściem z pudełka jest pozbycie się X całkowicie za pomocą CSS:

::-ms-clear { display: none; } /* see https://stackoverflow.com/questions/14007655 */

Ma to następujące zalety:

  1. znacznie prostsze rozwiązanie-pasuje do jednej linii
  2. dotyczy wszystkich wejść, więc nie musisz mieć obsługi dla każdego wejścia
  3. Brak ryzyka złamania javascript z błędem w logice (mniej QA konieczne)
  4. standaryzuje zachowanie w przeglądarkach-sprawia, że IE zachowuje się tak samo jak chrome, ponieważ chrome nie ma x
 3
Author: Almenon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-16 06:02:40

Dla mojego asp.net sterowanie serwerem

<asp:TextBox ID="tbSearchName" runat="server" oninput="jsfun_tbSearchName_onchange();"></asp:TextBox>

Js

function jsfun_tbSearchName_onchange() {
    if (objTbNameSearch.value.trim() == '')
            objBTSubmitSearch.setAttribute('disabled', true);
        else
            objBTSubmitSearch.removeAttribute('disabled');
        return false;
}

Ref

MSDN OnChange event - testowane w IE10.

... lub ukryć za pomocą CSS:

input[type=text]::-ms-clear { display: none; }
 1
Author: ablaze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-15 18:47:08

Powyższy kod nie działał w moim przypadku i zmieniłem jedną linijkę i wprowadziłem $input.typeahead('val', '');, która działa w moim przypadku..

// There are 2 events fired on input element when clicking on the clear button:// mousedown and mouseup.
$("input").on('mouseup', function(e){
    var $input = $(this),
    oldValue = $input.val();
    if (oldValue === ''){
        return;
    }
    // When this event is fired after clicking on the clear button // the value is not cleared yet. We have to wait for it.
    setTimeout(function(){
        var newValue = $input.val();
        if (newValue === ''){
            $input.typeahead('val', '');
            e.preventDefault();
        }
    }, 1);
});
 0
Author: Maneesh Thareja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-02 19:39:31