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();
});
This also won't work, because I just set some property of jQuery custom event object.
Only solution that works for me is to set property returnValue
of global variable event
like this:
$('a').on('click', function(event) {
if (window.event) {
window.event.returnValue = false;
}
event.preventDefault();
});
Just to make it easier for someone who will try to convince IE8 to work. I hope that IE8 will die horribly in painful death soon.
UPDATE:
As sv_in points out, you could use event.originalEvent
to get original event object and set returnValue
property in the original one. But I haven't tested it in my IE8 yet.
Mootools redefines preventDefault in Event objects. So your code should work fine on every browser. If it doesn't, then there's a problem with ie8 support in mootools.
Did you test your code on ie6 and/or ie7?
The doc says
Every event added with addEvent gets the mootools method automatically, without the need to manually instance it.
but in case it doesn't, you might want to try
new Event(event).preventDefault();
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
Tested on IE 9 and Chrome.
To disable a keyboard key after IE9, use : e.preventDefault();
To disable a regular keyboard key under IE7/8, use : e.returnValue = false;
or return false;
If you try to disable a keyboard shortcut (with Ctrl, like Ctrl+F
) you need to add those lines :
try {
e.keyCode = 0;
}catch (e) {}
Here is a full example for IE7/8 only :
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;
}
});
Reference : How to disable keyboard shortcuts in IE7 / IE8
Here's a function I've been testing with jquery 1.3.2 and 09-18-2009's nightly build. Let me know your results with it. Everything executes fine on this end in Safari, FF, Opera on OSX. It is exclusively for fixing a problematic IE8 bug, and may have unintended results:
function ie8SafePreventEvent(e) {
if (e.preventDefault) {
e.preventDefault()
} else {
e.stop()
};
e.returnValue = false;
e.stopPropagation();
}
Usage:
$('a').click(function (e) {
// Execute code here
ie8SafePreventEvent(e);
return false;
})
preventDefault
is a widespread standard; using an adhoc every time you want to be compliant with old IE versions is cumbersome, better to use a polyfill:
if (typeof Event.prototype.preventDefault === 'undefined') {
Event.prototype.preventDefault = function (e, callback) {
this.returnValue = false;
};
}
This will modify the prototype of the Event and add this function, a great feature of javascript/DOM in general. Now you can use e.preventDefault
with no problem.
return false
in your listener should work in all browsers.
$('orderNowForm').addEvent('submit', function () {
// your code
return false;
}
FWIW, in case anyone revisits this question later, you might also check what you are handing to your onKeyPress handler function.
I ran into this error when I mistakenly passed onKeyPress(this) instead of onKeyPress(event).
Just something else to check.
I was helped by a method with a function check. This method works in 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
'IT story' 카테고리의 다른 글
트위터 부트 스트랩 3 스티커 바닥 글 (0) | 2020.05.08 |
---|---|
Play 스토어 개발자 콘솔에서 '베타 출시 시작'비활성화 (0) | 2020.05.08 |
비어있을 때 HTML 텍스트 상자에 힌트를 표시하려면 어떻게해야합니까? (0) | 2020.05.08 |
Razor에서 메소드를 어떻게 정의합니까? (0) | 2020.05.08 |
android.widget.Switch-이벤트 리스너를 켜거나 끕니다? (0) | 2020.05.08 |