2010-08-03 1 views
1

폼 마법사가 있습니다. 1 단계에서 특정 확인란이 선택되어 있고 특정 클래스가있는 다른 사람이 아닌 경우 경고를 표시해야합니다. 문제는 다음 버튼을 누른 후 두 번째 단계에서 확인/경고를 표시한다는 것입니다. 경고를 표시하는 동안 브라우저가 두 번째 단계로 이동하지 못하게해야합니다.라이브 기능 및 클릭 이벤트 내에서의 preventBy 도움말

$("#step0Next").live('click', function(event) { 
     var ask = confirm("Do You Really Want To Continue"); 
     if($("#RT").is(":checked") && !$(".ex").is(':checked') && 
(ask===false)) { 
      event.preventDefault(); 
     } 
    }); 

http://www.kinetick.com/Test/purchaseTest 당신은 어떤 선택을하고 "다음"("#의 step0Next")을 공격하지 않는 경우는 확인 대화 상자가 2 단계로 이동합니다. 나는 1 단계에서 일어날 필요가있다. cancel을 누르면 거기에 계속있을 것이고, OK를 누르면 2 단계로 계속 진행할 수있을 것이다. 중요하다면 formToWizard.js 플러그인을 사용한다.

감사합니다.

+0

나는 아래의 솔루션을 추가했지만, 이상적인 tbh는 아니지만, 플러그인을 편집하지 않고 그 내부의'selectStep()'메소드를 노출시키지 않으면, 여기에서 선택의 여지가 없다. –

답변

1

경고, 이 사용자의 요구와 사이트에 조금 해키 및 특정 (이 찾는 다른 사람, 다른 솔루션을 사용!) :

$("#step0Next").live('click', function(event) { 
    $('#step1Prev').click();          //go back, hacky! 
    if($("#RT").is(":checked") && !$(".ex").is(':checked')) {   //conditons 
    if(!confirm("Do You Really Want To Continue")) return; //user said cancel 
    $("#step0Next").die('click');  //user said Ok, prevent prompting again 
    } 
    $(this).triggerHandler('click');      //resume normal behavior 
}); 

당신은 (일반적인 형태의 동작을 무시할 수 없기 때문에 자신의 클릭 핸들러는 .live() 이전에 발생합니다.) 우회합니다. 이렇게하면 다음 페이지의 버튼을 신속하게 클릭하여 번을 첫 번째 페이지로 되 돌렸으므로 "다음"동작을 방지하는 대신 UI가 업데이트되기 전에 되돌릴 수 있습니다.

조건이 충족되지 않으면 우리는 "이동"선택을 확인하라는 메시지를 표시하지만 한 번만 취소를 클릭하면 계속 확인 메시지가 표시되고 확인을 클릭하면 그들은 계속 이동하고 다시 .die()을 사용하여이 .live() 처리기를 제거함으로써 다시 귀찮게하지 않을 것입니다.

+0

@ 닉 - 너 천재 야. 이것은 잘 작동합니다. 더 많은 것을 요구하는 것이 싫지만 내 이해가 정확하도록 조금 더 설명 할 수 있습니까? 나는 완전히 "$ ('# step1Prev') click()"을 이해하지 못한다. - 만약 step2에서 뒤쪽으로 치면 (실제로 배열의 step1) 함수를 트리거하지 않는다. 어떻게? "("Do you .. ")) return) - 확인하지 않으면 말하는 것이 아닙니까? 다시 한번 고마워요, 당신이 이것에 약간의 시간을두고 있다는 것을 압니다. 나는 그것을 이해하고 싶습니다. –

+0

@Dirty - 클릭하면 1 단계로 바로 돌아가고, 조건이 충족되지 않으면 취소를 클릭하면 확인 메시지가 표시됩니다.() == false) 그러면 우리는 이미 1 단계로 되돌아 간다. 그냥 거기에 머무른다. 대신에이 핸들러를 언 바인드하면 다시 프롬프트되지 않으므로 조건이 충족되면 우리는 다음 페이지로 이동하는 '# step0Next' 버튼에 이미 클릭 핸들러가 있습니다. –

+0

@Nick - ok, 이제 "$ ('# step1Prev '). click();" 하지만 그것은 빈 함수입니다(); 그래서 우리가 step0Next 버튼을 다루고 있기 때문에 우리가 왜 필요하게하는지에 대해서는 명확하지 않습니다. $ ('# step0Next'). die ('click'); 핸들러의 바인딩을 해제하는 방법은 무엇입니까? (confirm() === true)를 클릭하면 다시 묻지 않고 계속 진행합니다. 남자 멋진 물건. –