문제

다음은 내 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를 제외한 모든 브라우저에서는 제대로 작동합니다. 그러나 즉, 이것은 오류가 발생합니다. IE8이있어 JavaScript 디버거를 사용하는 동안 event 객체에는 a가 없습니다 preventDefault 오류를 일으키고 양식이 제출됩니다. 이 방법은 Firefox (Firebug를 사용하여 발견)의 경우 지원됩니다.

도움이 있습니까?

도움이 되었습니까?

해결책

즉, 사용할 수 있습니다

event.returnValue = false;

동일한 결과를 얻으려면.

그리고 오류가 발생하지 않기 위해 예방 대표의 존재를 테스트 할 수 있습니다.

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

두 가지를 다음과 결합 할 수 있습니다.

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

다른 팁

Mootools의 addevent 함수를 통해 이벤트를 바인딩하면 이벤트 핸들러가 매개 변수로 전달 된 고정 (증강) 이벤트가 나타납니다. 항상 extendefault () 메소드가 포함됩니다.

이 바이올린을 사용하여 이벤트 바인딩의 차이를 확인하십시오.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 = ".."를 사용했다고 가정하고 예방 default ()가없는 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 거짓으로 직접 속성 :

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

JQuery Custom Event Object의 속성을 설정하기 때문에 이것은 작동하지 않습니다.

나에게 적합한 솔루션은 재산을 설정하는 것입니다. 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는 이벤트 객체에서 예방을 재정의합니다. 따라서 모든 브라우저에서 코드가 정상적으로 작동해야합니다. 그렇지 않으면 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();

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

비활성화하려고하면 a 키보드 단축키 (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;
})

preventDefault 광범위한 표준입니다. 이전 IE 버전을 준수 할 때마다 ADHOC를 사용하는 것은 번거롭고 폴리 필기를 사용하는 것이 좋습니다.

if (typeof Event.prototype.preventDefault === 'undefined') {
    Event.prototype.preventDefault = function (e, callback) {
        this.returnValue = false;
    };
}

이것은 이벤트의 프로토 타입을 수정하고 일반적으로 JavaScript/dom의 훌륭한 기능인이 기능을 추가합니다. 이제 사용할 수 있습니다 e.preventDefault 문제없이.

return false 청취자는 모든 브라우저에서 작동해야합니다.

$('orderNowForm').addEvent('submit', function () {
    // your code
    return false;
}

FWIW, 나중에이 질문을 다시 방문하는 경우 OnKeypress 핸들러 기능에 적용되는 내용도 확인할 수도 있습니다.

onkeypress (이벤트) 대신 Onkeypress (this)를 실수로 통과했을 때이 오류가 발생했습니다.

확인해야 할 다른 것.

나는 함수 점검 방법으로 도움을 받았다. 이 방법은 IE8에서 작동합니다

if(typeof e.preventDefault == 'function'){
  e.preventDefault();
} else {
  e.returnValue = false;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top