event.prevent Default() 함수가 IE에서 작동하지 않음
다음은 내 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에서는 이로 인해 오류가 발생합니다.저는 IE8을 가지고 있습니다.그래서 자바스크립트 디버거를 사용하는 동안event
오브젝트에는 다음이 없습니다.preventDefault
에러의 원인이 되고 있기 때문에, 폼이 송신됩니다.Firefox(Firebug를 사용하여 알게 된)의 경우 이 메서드가 지원됩니다.
도움이 필요하신가요?
IE 에서는,
event.returnValue = false;
같은 결과를 얻을 수 있습니다.
또한 오류가 발생하지 않도록 prevent Default가 존재하는지 테스트할 수 있습니다.
if(event.preventDefault) event.preventDefault();
다음 두 가지를 조합할 수 있습니다.
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
mootools의 addEvent 함수를 통해 이벤트를 바인드하면 이벤트 핸들러는 파라미터로 전달된 고정(증강) 이벤트를 받습니다.여기에는 항상 prevent Default() 메서드가 포함됩니다.
이벤트 바인딩의 차이를 확인하려면 이 바이올린을 사용해 보십시오.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="을 사용했다고 가정합니다.prevent Default()가 없는 IE 고유의 이벤트를 가져오려면 이 코드를 사용합니다.
e = $.event.fix(e);
그 후.proventDefault();는 정상적으로 동작합니다.
꽤 오래된 게시물인 것은 알지만 IE8에서 이 작업을 수행하기 위해 잠시 시간을 보냈습니다.
IE8 버전에는 몇 가지 차이가 있는 것 같습니다.여기에 게시된 솔루션과 다른 스레드가 작동하지 않았기 때문입니다.
예를 들어 다음과 같은 코드가 있다고 합시다.
$('a').on('click', function(event) {
event.preventDefault ? event.preventDefault() : event.returnValue = false;
});
내 IE8에서는preventDefault()
method는 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는 이벤트 객체의 prevent Default를 재정의합니다.따라서 모든 브라우저에서 코드가 올바르게 작동합니다.그렇지 않은 경우, 무트의 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의 야간 빌드로 테스트해 본 함수는 다음과 같습니다.그것으로 당신의 결과를 알려주세요.Safari, FF, Opera on OSX에서는 모든 것이 정상적으로 실행됩니다.이것은 문제가 있는 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 때마다 하는 것은.구식 IE 버전에 준거할 때마다 애드혹을 사용하는 것은 번거로우므로 폴리필을 사용하는 것이 좋습니다.
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(이벤트)를 전달했을 때 이 오류가 발생했습니다.
확인할 게 하나 더 있어요
나는 기능 점검 방법에 도움을 받았다.이 방법은 IE8에서 동작합니다.
if(typeof e.preventDefault == 'function'){
e.preventDefault();
} else {
e.returnValue = false;
}
언급URL : https://stackoverflow.com/questions/1000597/event-preventdefault-function-not-working-in-ie
'sourcecode' 카테고리의 다른 글
숫자 형식을 통화 문자열로 지정하는 방법 (0) | 2022.11.17 |
---|---|
SELECT를 사용할 때 MySQL BIT 필드 값을 볼 수 없습니다. (0) | 2022.11.17 |
순차적으로 NPM 스크립트 실행 (0) | 2022.11.17 |
자바에서는 x++와 ++x의 차이가 있나요? (0) | 2022.11.17 |
MySQL의 그룹화 전 순서 (0) | 2022.11.17 |