2012-12-16 2 views
2

UI 용 backbone.js 및 jQuery를 사용하는 응용 프로그램이 있습니다. 양식의 텍스트 상자에 첨부 된 양식이 있습니다. blur 이벤트는 특정 조건에서 사용자에게 팝업을 표시하고 입력을 기다리는 기능입니다. 조건은 WCF 서비스에 대한 ajax 호출을 사용하여 검사됩니다.다른 콜백이 완료되기 전에 이벤트 방지하기

포커스가 텍스트 필드에 설정되어있는 동안 양식의 제출 단추를 클릭하기 전까지 모든 것이 잘 작동합니다. 그런 다음 팝업이 표시되지만 양식은 제출됩니다. 적절한 결과가

어떻게 이것을 달성 할 수 있습니다 (팝업 확실히 제출 할 수없는 형태로 표시되어있는 경우) 두 번째 이벤트를 취소하는 것 물론

?

답변

0

당신을 이해할 수 없지만 아마도 이것이 필요한 것입니다 : event.stopPropagation();

http://api.jquery.com/event.stopPropagation/

또는 .OFF()

http://api.jquery.com/off/

+0

은 정확한 이벤트가 DOM 트리를 버블 링하는 것을 막기위한 event.stopPropagation이 아닙니다. 내 문제는 두 개의 별도 이벤트가 발생했습니다 - 흐리게 및 제출 단추를 눌렀습니다. 하지만 두 번째 것을 취소하고 싶습니다. – lipman

0

당신은 '제출'의 클릭이 팝업 표시하는 원인이되는 건가요 -이는 '특정 조건 중 하나가 아닙니다 '어디에 표시해야합니까? 제출 버튼이 클릭되었는지 확인하는 블러 핸들러에 조건을 추가하는 것을 고려할 것입니다. 이 경우에는 팝업을 표시하지 마십시오.

태그의 onsubmit 핸들러에서 이벤트를 취소 -

form.addEventListener("submit", function(evt){ 
evt.cancel() 
//dont want to catch it again 
form.removeEventListener(this) 
popup.show() 
//have the popup call submit when done, it wont be caught again 
} 
+0

팝업이 표시되어야하지만 제출은 – lipman

+0

'을 통과해서는 안됩니다. preventDefault()를 호출하는 대신 처리기에서 false를 반환 할 수도 있지만 조인 요소가 조상 요소로 전달되는 것을 중지합니다. 필요.' 이 솔루션을 사용하면 전파가 정상 제출 이벤트와 동일하게 유지됩니다. –

0

당신은 <form>submit 이벤트에 결합하여 팝업이 표시되는 경우 제출을 억제하기 위해 preventDefault() 메소드를 호출 할 수 있습니다

$("form").submit(function(e) { 
    if ($("selector_matching_your_popup").is(":visible")) { 
     e.preventDefault(); // Cancel submission. 
    } 
}); 

을 호출하는 대신 처리기에서 false을 반환 할 수도 있지만이 과정을 통해 submit 이벤트의 전파가 중단됩니다. 또는 당신이 원하지 않는 요소들.

관련 문제