를 해고하면 evt.preventDefault()
기본 작업을 다시 재개 하려면 어떻게해야합니까?
를 해고하면 evt.preventDefault()
기본 작업을 다시 재개 하려면 어떻게해야합니까?
답변:
@Prescott의 의견에 따르면 다음과 반대입니다.
evt.preventDefault();
될 수 있습니다 :
더 이상 방해하지 않기 때문에 기본적으로 '기본 설정' 과 동일시 합니다.
그렇지 않으면 다른 의견과 답변에서 제공하는 답변을 알려줍니다.
jQuery를 사용하여 event.preventDefault ()를 호출하는 리스너를 바인딩 해제하는 방법은 무엇입니까?
event.preventDefault를 다시 활성화하는 방법?
두 번째 솔루션은 redsquare이 제공 한 예제 솔루션으로 승인되었습니다 (이것이 중복으로 닫히지 않은 경우 직접 솔루션을 위해 여기에 게시 됨).
$('form').submit( function(ev) {
ev.preventDefault();
//later you decide you want to submit
$(this).unbind('submit').submit()
});
click
jQuery 의 이벤트에서 링크를 계속하기 전에 명령을 처리하려면 다음을 수행하십시오 .
예 : <a href="http://google.com/" class="myevent">Click me</a>
jQuery를 방지하고 따르십시오.
$('a.myevent').click(function(event) {
event.preventDefault();
// Do my commands
if( myEventThingFirst() )
{
// then redirect to original location
window.location = this.href;
}
else
{
alert("Couldn't do my thing first");
}
});
또는 단순히 실행 window.location = this.href;
애프터preventDefault();
비동기 호출을 실행하기 위해 jQuery에서 양식 제출을 지연해야했습니다. 간단한 코드는 다음과 같습니다.
$("$theform").submit(function(e) {
e.preventDefault();
var $this = $(this);
$.ajax('/path/to/script.php',
{
type: "POST",
data: { value: $("#input_control").val() }
}).done(function(response) {
$this.unbind('submit').submit();
});
});
event.preventDefault(); //or event.returnValue = false;
그 반대 (표준) :
event.returnValue = true;
출처 : https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue
다음과 같은 패턴을 제안합니다.
document.getElementById("foo").onsubmit = function(e) {
if (document.getElementById("test").value == "test") {
return true;
} else {
e.preventDefault();
}
}
<form id="foo">
<input id="test"/>
<input type="submit"/>
</form>
... 내가 뭔가를 빠뜨리지 않는 한.
event.preventDefault()
왜 당신이 event.preventDefault()
그것을 부를 때 무엇을 조사해야하는지 이해하는 반대의 방법은 없습니다 .
후드 아래에서 preventDefault의 기능은 본질적으로 추가 실행을 중지시키는 return false를 호출합니다. Javascript의 이전 방법에 익숙하다면, 양식 제출 및 return true (jQuery가 주변에 있기 전에)를 사용하여 버튼을 취소하는 데 return false를 사용하는 것이 유행이었습니다.
아마도 위의 간단한 설명을 바탕으로 이미 운동했을 것입니다. 그 반대 event.preventDefault()
는 아무것도 아닙니다. 이벤트를 막지 않고 기본적으로 브라우저는 이벤트를 막지 않으면 이벤트를 허용합니다.
설명은 아래를 참조하십시오.
;(function($, window, document, undefined)) {
$(function() {
// By default deny the submit
var allowSubmit = false;
$("#someform").on("submit", function(event) {
if (!allowSubmit) {
event.preventDefault();
// Your code logic in here (maybe form validation or something)
// Then you set allowSubmit to true so this code is bypassed
allowSubmit = true;
}
});
});
})(jQuery, window, document);
위 코드에서 allowSubmit이 false인지 확인하고 있음을 알 수 있습니다. 즉, 양식을 사용하여 제출하지 못하게하고 event.preventDefault
유효성 검사 논리를 수행하고 만족스러운 경우 allowSubmit을 true로 설정합니다.
이것은 실제로 반대되는 유일한 효과적인 방법입니다. event.preventDefault()
본질적으로 동일한 것을 달성 할 수있는 이벤트도 제거 할 수 있습니다.
유용한 것이 있습니다 ...
먼저 링크를 클릭하고 코드를 실행 한 다음 기본 작업을 수행합니다. event.currentTarget을 사용하여 가능합니다 . 여기서는 새 탭에서 Google에 액세스하려고하지만 코드를 실행하기 전에 시도합니다.
<a href="https://www.google.com.br" target="_blank" id="link">Google</a>
<script type="text/javascript">
$(document).ready(function() {
$("#link").click(function(e) {
// Prevent default action
e.preventDefault();
// Here you'll put your code, what you want to execute before default action
alert(123);
// Prevent infinite loop
$(this).unbind('click');
// Execute default action
e.currentTarget.click();
});
});
</script>
어떤 해결책도 도움이되지 않았으며 상황을 해결하기 위해이 작업을 수행했습니다.
<a onclick="return clickEvent(event);" href="/contact-us">
그리고 기능 clickEvent()
,
function clickEvent(event) {
event.preventDefault();
// do your thing here
// remove the onclick event trigger and continue with the event
event.target.parentElement.onclick = null;
event.target.parentElement.click();
}
"반대"는 이벤트를 시뮬레이션하는 것이라고 생각합니다. 당신은 사용할 수 있습니다.createEvent()
Mozilla의 예를 따르면 다음과 같습니다.
function simulateClick() {
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
var cb = document.getElementById("checkbox");
var cancelled = !cb.dispatchEvent(evt);
if(cancelled) {
// A handler called preventDefault
alert("cancelled");
} else {
// None of the handlers called preventDefault
alert("not cancelled");
}
}
참조 : document.createEvent
jQuery를 .trigger()
사용하면 요소에 대한 이벤트를 트리거 할 수 있으며 때로는 유용합니다.
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
jquery on () 은 이것에 대한 또 다른 해결책이 될 수 있습니다. escpacially 그것의 사용에 관해서 네임 스페이스 .
jquery on ()은 이벤트를 바인딩하는 현재 방법입니다 (bind () 대신). off ()는 이들을 바인딩 해제하는 것입니다. 네임 스페이스를 사용하면 여러 개의 다른 이벤트를 추가하고 제거 할 수 있습니다.
$( selector ).on("submit.my-namespace", function( event ) {
//prevent the event
event.preventDefault();
//cache the selector
var $this = $(this);
if ( my_condition_is_true ) {
//when 'my_condition_is_true' is met, the binding is removed and the event is triggered again.
$this.off("submit.my-namespace").trigger("submit");
}
});
이제 네임 스페이스를 사용하면 이러한 이벤트를 여러 개 추가 할 수 있으며 필요에 따라 이벤트를 제거 할 수 있습니다. 제출이 가장 좋은 예는 아니지만 클릭 또는 키 누르기 등에 유용 할 수 있습니다.
이것은 질문에 대한 직접적인 대답은 아니지만 누군가에게 도움이 될 수 있습니다. 내 요점은 모든 경우에 preventDefault ()를 호출하면 이벤트가 발생할 점이 없기 때문에 일부 조건에 따라 preventDefault () 만 호출한다는 것입니다. 따라서 조건이 충족되고 조건이 충족 될 때만 preventDefault ()를 호출하면 다른 경우에는 일반적인 방식으로 함수가 작동합니다.
$('.btnEdit').click(function(e) {
var status = $(this).closest('tr').find('td').eq(3).html().trim();
var tripId = $(this).attr('tripId');
if (status == 'Completed') {
e.preventDefault();
alert("You can't edit completed reservations");
} else if (tripId != '') {
e.preventDefault();
alert("You can't edit a reservation which is already attached to a trip");
}
//else it will continue as usual
});
"preventDefault"메소드 이후에이를 사용할 수 있습니다.
//evt.target은 기본 이벤트를 반환합니다 (예 : defult url 등).
var defaultEvent=evt.target;
// 여기서 기본 이벤트를 저장합니다.
if("true")
{
//activate default event..
location.href(defaultEvent);
}
이 코드는 내가 사용한 후에 이벤트를 다시 인스턴스화하는 데 도움이되었습니다.
event.preventDefault(); to disable the event.
event.preventDefault = false;
다음 코드를 사용했습니다. 그것은 나를 위해 잘 작동합니다.
$('a').bind('click', function(e) {
e.stopPropagation();
});
event.preventDefault()
.