2011-01-12 3 views
20

변수 SomeCondition에 기반하여 단추의 클릭 이벤트를 가로 채고 확인을 묻는 메시지가 나타나면 계속 진행하고 그렇지 않으면 무시하십시오.버튼의 클릭 이벤트를 가로 채고 확인한 다음 계속 진행하십시오

그래서 뭔가 같은 :

if(SomeCondition) { 

// disable click on button 

var isOk = window.confirm("Are you sure?"); 

if(isOk) { 
     $("#button1").click(); 
} 

} 

참고 : 단추 1은 이미 내가 바꿀 수없는 외부의 .js 파일에서 자바 스크립트를 통해 클릭 이벤트와 유선되었습니다.

클릭 이벤트도 무엇인지 모르므로 SomeCondition이 참이면 클릭을 비활성화하고 확인을 요청한 다음 클릭을 계속하십시오.

답변

38

프로세스는 버튼의 기능 내에서 window.confirm을 isOK

$('#button1').click(function(){ 
    if(window.confirm("Are you sure?")) 
    alert('Your action here'); 
}); 

당신이 할 겁니다 문제는 당신이 "당신은 확실한가"당신을 트리거 할 때 클릭이 이미로 preventDefault '아무튼 호출 일어난 것입니다 원래의 클릭 실행을 멈추십시오. 원래의 윈도우를 시작한 경우 클릭하십시오. 확인하십시오.

닭고기/계란 문제의 비트.

편집 : 편집 된 질문을 읽은 후 :

jQuery로
var myClick = null; 

    //get a list of jQuery handlers bound to the click event 
    var jQueryHandlers = $('#button1').data('events').click; 

    //grab the first jquery function bound to this event 
    $.each(jQueryHandlers,function(i,f) { 
     myClick = f.handler; 
     return false; 
    }); 

    //unbind the original 
    $('#button1').unbind('click'); 

    //bind the modified one 
    $('#button1').click(function(){ 
     if(window.confirm("Are You Sure?")){ 
      myClick(); 
     } else { 
      return false; 
     } 
    }); 
+0

이것은 내가 작성한 것입니다. +1 – Stephen

+0

[0]은 (는) 무엇을 말합니까? – Blankman

+0

@Blankman @Blankman 나쁜 습관 (하나 이상의 일치하는 요소가있는 경우 jQuery 객체 배열의 첫 번째 요소를 참조하여 첫 번째 요소를 얻을 수 있음) –

2

기본을 방지하기 위해 방금 return false : 특별하지 특히 ​​(간단한 솔루션을 찾고있는 사람에게

$("#button1").click(function() { 
    //do your thing 
    return false; 
}); 
+3

어은 ... 정말.이 버블을 방지 할 수 있습니다. – Stephen

+0

@ 스티븐 http://api.jquery.com/submit/이 – Skilldrick

+0

@Stephen가'false를 돌려 "우리는 이벤트 객체에 .preventDefault()를 호출하여 또는 우리의 핸들러에서 false를 반환하여 제출 조치를 취소 할 수 있습니다";'실제로 수행에서 preventDefault 및 stopPropagation – Skilldrick

2

조건 여기에 언급 됨)

버튼에이 속성을 추가하기 만하면 :

.... , onclick = "return confirm('are you sure?')" 

확인 상자가 false를 반환하면 click 이벤트가 취소됩니다. 참고 : 명시 적으로 언급 된 onclick 처리기는 다른 바인딩을 무시합니다.

0

나는 1.9.1 여기

이전에 설정된 근무 무엇 JQuery와를 사용하여 작업 위의 답변 중 하나를 가져올 수 없습니다 click 이벤트

var elem = $('#button1'); 
var oldClick = $._data(elem[0], 'events').click[0].handler; 
elem.off('click'); 

elem.click(function(){ 
    if(window.confirm("Are You Sure?")){ 
    oldClick(); 
    } else { 
    return false; 
    } 
}); 

위 제이슨 벤슨의 대답과 매우 유사
관련 문제