[javascript] IE에서 event.preventDefault () 함수가 작동하지 않습니다

다음은 내 JavaScript (mootools) 코드입니다.

$('orderNowForm').addEvent('submit', function (event) {
    event.preventDefault();
    allFilled = false;
    $$(".required").each(function (inp) {
        if (inp.getValue() != '') {
            allFilled = true;
        }
    });

    if (!allFilled) {
        $$(".errormsg").setStyle('display', '');
        return;
    } else {
        $$('.defaultText').each(function (input) {
            if (input.getValue() == input.getAttribute('title')) {
                input.setAttribute('value', '');
            }
        });
    }

    this.send({
        onSuccess: function () {
            $('page_1_table').setStyle('display', 'none');
            $('page_2_table').setStyle('display', 'none');
            $('page_3_table').setStyle('display', '');
        }
    });
});

IE를 제외한 모든 브라우저에서 이것은 잘 작동합니다. 그러나 IE에서는 오류가 발생합니다. JavaScript 디버거를 사용하는 동안 IE8이 있으므로 event객체 preventDefault에 오류를 일으키는 메소드가 없으므로 양식이 제출 된다는 것을 알았습니다 . 이 방법은 Firefox의 경우 지원됩니다 (Firebug를 사용하여 알았습니다).

도움이 필요하십니까?



답변

IE에서 사용할 수 있습니다

event.returnValue = false;

같은 결과를 얻을 수 있습니다.

그리고 오류가 발생하지 않도록 preventDefault가 있는지 테스트 할 수 있습니다.

if(event.preventDefault) event.preventDefault();

둘을 다음과 결합 할 수 있습니다.

event.preventDefault ? event.preventDefault() : (event.returnValue = false);


답변

mootools의 addEvent 함수를 통해 이벤트를 바인드하면 이벤트 핸들러는 고정 된 (증강 된) 이벤트를 매개 변수로 전달합니다. 항상 preventDefault () 메소드를 포함합니다.

이 바이올린을 사용하여 이벤트 바인딩의 차이점을 확인하십시오.
http://jsfiddle.net/pFqrY/8/

// preventDefault always works
$("mootoolsbutton").addEvent('click', function(event) {
 alert(typeof(event.preventDefault));
});

// preventDefault missing in IE
<button
  id="htmlbutton"
  onclick="alert(typeof(event.preventDefault));">
  button</button>

모든 jQuery 사용자의 경우 필요할 때 이벤트를 수정할 수 있습니다. HTML onclick = “..”을 사용하고 preventDefault ()가없는 IE 특정 이벤트를 받으면이 코드를 사용하십시오.

e = $.event.fix(e);

그 후 e.preventDefault (); 잘 작동합니다.


답변

나는 이것이 꽤 오래된 게시물이라는 것을 알고 있지만 IE8 에서이 작업을 시도하는 데 약간의 시간을 보냈습니다.

여기에 게시 된 솔루션과 다른 스레드에서 작동하지 않아 IE8 버전에 약간의 차이가있는 것으로 보입니다.

이 코드가 있다고 가정 해 봅시다.

$('a').on('click', function(event) {
    event.preventDefault ? event.preventDefault() : event.returnValue = false;
});

내 IE8 preventDefault()방법에는 jQuery로 인해 존재하지만 작동하지 않습니다 (아마도 아래 점 때문에). 그래서 실패합니다.

returnValue속성을 직접 false로 설정하더라도 :

$('a').on('click', function(event) {
    event.returnValue = false;
    event.preventDefault();
});

jQuery 사용자 정의 이벤트 객체의 일부 속성을 설정했기 때문에 작동하지 않습니다.

나를 위해 작품 설정 속성입니다 만 솔루션 returnValue글로벌 변수 event 같은 :

$('a').on('click', function(event) {
    if (window.event) {
        window.event.returnValue = false;
    }
    event.preventDefault();
});

IE8을 설득하려고하는 사람이 일하기 쉽도록하기 위해. IE8이 곧 고통스러운 죽음으로 죽을 수 있기를 바랍니다.

최신 정보:

으로 sv_in 밖으로 포인트, 당신은 사용할 수 있습니다 event.originalEvent원래 이벤트 객체와 세트 얻기 위해 returnValue원래의 속성을. 그러나 아직 IE8에서 테스트하지 않았습니다.


답변

Mootools는 Event 객체에서 preventDefault를 재정의합니다. 따라서 모든 브라우저에서 코드가 제대로 작동해야합니다. 그렇지 않은 경우 mootools의 ie8 지원에 문제가 있습니다.

ie6 및 / 또는 ie7에서 코드를 테스트 했습니까?

의사는 말합니다

addEvent로 추가 된 모든 이벤트는 수동으로 인스턴스화 할 필요없이 mootools 메소드를 자동으로 가져옵니다.

그러나 그렇지 않은 경우 시도해 볼 수 있습니다.

new Event(event).preventDefault();


답변

if (e.preventDefault) {
    e.preventDefault();
} else {
    e.returnValue = false;
}

IE 9 및 Chrome에서 테스트되었습니다.


답변

IE9 이후에 키보드 키를 비활성화하려면 다음을 사용하십시오. e.preventDefault();

IE7 / 8에서 일반 키보드 키 를 비활성화하려면 : e.returnValue = false;또는return false;

키보드 단축키 를 비활성화 하려면 (예 : Ctrl 키 를 사용하여 Ctrl+F) 해당 행을 추가해야합니다.

try {
    e.keyCode = 0;
}catch (e) {}

다음은 IE7 / 8에 대한 전체 예입니다.

document.attachEvent("onkeydown", function () {
    var e = window.event;

    //Ctrl+F or F3
    if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
        //Prevent for Ctrl+...
        try {
            e.keyCode = 0;
        }catch (e) {}

        //prevent default (could also use e.returnValue = false;)
        return false;
    }
});

참조 : IE7 / IE8에서 키보드 단축키를 비활성화하는 방법


답변

다음은 jquery 1.3.2 및 09-18-2009의 야간 빌드로 테스트 한 기능입니다. 결과를 알려주세요. OSX의 Safari, FF, Opera 에서이 모든 것이 잘 끝납니다. 문제가있는 IE8 버그를 수정하기위한 것이며 의도하지 않은 결과가 발생할 수 있습니다.

function ie8SafePreventEvent(e) {
    if (e.preventDefault) {
        e.preventDefault()
    } else {
        e.stop()
    };

    e.returnValue = false;
    e.stopPropagation();
}

용법:

$('a').click(function (e) {
    // Execute code here
    ie8SafePreventEvent(e);
    return false;
})