지우기 아이콘으로 IE10에서 텍스트 입력을 지울 때 발생하는 이벤트


83

크롬에서 사용자가 지우기 버튼을 클릭하면 검색 입력에서 "검색"이벤트가 발생합니다.

Internet Explorer 10의 JavaScript에서 동일한 이벤트를 캡처하는 방법이 있습니까?

여기에 이미지 설명 입력



아니요, 이것은 IE10에 관한 것입니다. 웹킷에서 나는 이것을 처리하는 방법을 알고 있습니다.
ghusse

필드를 지울 때 IE10에서는 이벤트가 발생하지 않습니다.
wakooka 2013 년

1
흠, 시도해 볼 가치가 있지만 IE에도 버그가있는 '입력'이벤트가있는 것 같습니다. help.dottoro.com/ljhxklln.php (텍스트가 추가 될 때만 실행되고 제거 될 때만 실행됩니다!)
natevw

3
@ghusse 'input'이벤트가 시작됩니다.
kzh

답변:


72

내가 마침내 찾은 유일한 해결책 :

// 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);
});

1
감사합니다 Ghusse! 누군가 (setTimeout없이) 다른 솔루션을 생각해 내면 알려주세요.
그는 Nrik

이것은 ASP.NET / jQuery / IE11에서도 작동합니다. $ ( "input"). bind ( "mouseup", function (e) {대신 $ ( '# <% = MyTextBox.ClientID %>'). mouseup (function () {
Joe Schmoe

3
아래 Lucent의 솔루션은 IE11에서 저에게 효과적입니다. 그의 해결책은 oninput대신 이벤트 를 사용하는 것입니다. X 아이콘을 누르면 input이벤트가 발생합니다.
iheartcsharp 2015

if 문이되어야하지 if (oldValue === "")않습니까?
Dylan Czenski

input-event 가있는 Lucent의 솔루션 이 작동 하는 동안 이 솔루션은 요소가 지워졌을 때만 실행되는 반면 Lucent는 커서가 요소에 들어가고 요소를 떠날 때 및 데이터가 입력 될 때도 실행된다는 점에서 우수합니다.
spheenik

40

oninput이벤트가 함께 발생 this.value빈 문자열로 설정합니다. X 또는 백 스페이스로 검색 상자를 지우 든 동일한 작업을 실행하고 싶었 기 때문에 이것은 나를 위해 문제를 해결했습니다. 이것은 IE 10에서만 작동합니다.


1
이것은 IE10에서도 작동합니다. IE의 이전 버전에는 명확한 필드 버튼이 있다고 생각하지 않습니다. 따라서 IE10에서만 작동해야합니다
andyface

3
IE11에서도 작동합니다!
AfroMogli

1
이것은 Chrome 및 Firefox에서도 작동하며 사용자가 마우스 오른쪽 버튼을 클릭하고 값을 잘라낼 때도 실행됩니다. 연결하려면 다음을 사용하십시오 inputEl.addEventListener('input', function(){ /* DoSomething */ })..
Derek

32

input대신 사용하십시오 . 모든 브라우저에서 동일한 동작으로 작동합니다.

$(some-input).on("input", function() { 
    // update panel
});

1
IE 11에서 문서 모드 5, 닫는 대괄호 누락, btw에서 작동하지 않습니다.
Bernhard Döbler

10

왜 안돼

$("input").bind('input propertychange', function() {
    if (this.value == ""){
      $input.trigger("cleared");
    }
});

1
사용자가 키보드로 일부 텍스트를 제거하면 어떻게됩니까?
ghusse

@ghusse 버튼을 사용하지 않고 클릭하고 드래그하여 텍스트 필드를 지울 수도 있습니다. 따라서 받아 들여진 답변도 실패 할 것입니다. 사용자가 필드 지우기 버튼을 누르면 이벤트 알림을 받기를 원하기 때문에 OP가 질문을 한 것 같습니다.
Ertug

클릭과 드래그로 키보드의 del 버튼을 누르는 것 외에는 텍스트 필드를 지우는 방법을 볼 수 없습니다.
ghusse

@ghusse 모든 텍스트를 선택하고 다른 텍스트 상자로 드래그하십시오. 작동하지 않는 경우 Alt 키를 눌러보십시오.
Ertug

질문에 100 % 구체적이지는 않지만 이것이 하루가 끝나면 더 나은 대답 인 것 같습니다. 크롬에서 자동 완성까지 모든 종류의 케이스를 커버하는 것 같습니다.
AR

8

나는이 질문에 대한 답변을 받았지만 받아 들여진 답변이 우리 상황에서 효과가 없다는 것을 알고 있습니다. IE10은 $input.trigger("cleared");성명을 인식 / 실행하지 못했습니다 .

최종 솔루션은 해당 문을 ENTER 키 (코드 13)의 keydown 이벤트로 대체했습니다. 후손에게는 이것이 우리의 경우에 효과가 있었던 것입니다.

$('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);
});

또한이 바인딩을 페이지의 모든 입력이 아닌 "검색"입력에만 적용하려고했습니다. 당연히 IE는 이것을 어렵게 만들었습니다 ... 비록 우리가 코딩했지만 <input type="search"...>IE는 그것들을 type="text". 이것이 jQuery 선택기가 type="text".

건배!


내가 대신 keyup을 트리거했지만 (내 코드는 2 개의 문자를 찾고 자동으로 keyup을 검색)
punkologist

6

input이벤트를 들을 수 있습니다 . 자세한 내용 은 참고 자료 를 참조하십시오. IE의 Sencha ExtJS에서 지우기 버튼 문제를 해결 한 방법입니다.

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
        });
    }
});

1
이 답변은 MS Edge에서 작동하며 "x"를 클릭하여 검색 필드를 지우면 "입력"이벤트가 발생합니다.
Mottie

나는 vanilla js를 사용하고 있고 MS Edge는 X를 클릭 할 때 입력 이벤트를 발생시키지 않습니다. 어쨌든 그러한 이벤트를 보려고 시도하는 것은 나쁜 생각이었습니다. 일반 양식과 같은 버튼을 사용하는 것이 좋습니다.
Rivenfall

2

즉시 사용 가능한 솔루션은 CSS로 X를 완전히 제거하는 것입니다.

::-ms-clear { display: none; } /* see /programming/14007655 */

다음과 같은 이점이 있습니다.

  1. 훨씬 더 간단한 솔루션-한 줄에 적합
  2. 모든 입력에 적용되므로 각 입력에 대한 핸들러가 필요하지 않습니다.
  3. 로직 버그로 자바 스크립트를 깨뜨릴 위험 없음 (QA가 덜 필요함)
  4. 브라우저 간 동작 표준화-크롬에 X가 없다는 점에서 IE가 크롬과 동일하게 동작하도록합니다.

1

내 asp.net 서버 제어

<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;
}

심판

MSDN onchange 이벤트 -IE10에서 테스트되었습니다.

... 또는 CSS로 숨기기 :

input[type=text]::-ms-clear { display: none; }

0

위의 코드는 제 경우에 작동하지 않았고 한 줄을 변경 $input.typeahead('val', '');하고 제 경우에 작동하는 것을 소개했습니다 .

// 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);
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.