2010-08-03 5 views
0

У меня есть диалог подтверждения, который появляется после нажатия («# step0Next») в мастере формы. В настоящее время он появляется после нажатия кнопки на следующем шаге. Мне нужно, чтобы он появился, когда вы нажимаете кнопку на шаге THAT (шаг 1), а не когда он переходит к шагу 2. Как остановить действие кнопки по умолчанию, пока пользователь не нажмет «ОК» в диалоге?Help with preventdefault

$("#step0Next").live('click', function(event) { 
    event.preventDefault(); 
    if($("#RT").is(":checked") && !$(".ex").is(':checked')) { 
     return confirm ('foo'); 
     //alert("You have not selected any exchanges for which to receive real time market data from. If you continue, you will only receive real time data for market metrics and ten minute delayed data for everything else. Do you wish to continue?"); 
     $(this).die('click'); 
    } 
}); 
+0

Не можете ли вы дать всем этим элементам класс и просто сделать '! $ (". Someclass "). Is (': checked')'? Waaaaay более удобен в обслуживании! Также '$ (this) .die ('click');' никогда не будет выполняться по мере возврата. У вас есть демо-страница? Как-то трудно представить, что не так. –

+0

Плохо добавить класс, хороший момент. Как заставить его всплывать на том же шаге, прежде чем прогрессировать. Кроме того, thx для справки, отступающей от кода. –

+0

Что это за кнопка? Кнопка 'submit '? 'event.preventDefault();' should work ... –

ответ

0

confirm() не имеет никаких действий по умолчанию. Вместо того, чтобы возвращать его, вам необходимо предотвратить значение по умолчанию после проверки возвращаемого значения. (Я не полностью слежу за вашим вопросом, но я предполагаю, что вы захотите продолжить работу после того, как пользователь нажмет OK ... не «остановить действие по умолчанию»?)

Удалить event.preventDefault() откуда он сейчас и делает :

if(... long if statement ...) { 
    if(confirm("Are you sure? Yadda Yadda")) { 
     // User clicked OK 
    } 
    else { 
     // User clicked Cancel 
     event.preventDefault(); 
    } 
} 

конечно, если вы действительно хотите, чтобы предотвратить действие по умолчанию независимо была нажата, даже если пользователь нажал ОК, а затем оставить preventDefault вызов, где он был. Код, который я предоставляю, все равно скажет вам, какую кнопку они нажали в диалоговом окне подтверждения.

+0

Не уверен, что я следую, замените .is (': checked') на содержимое сообщения? Просьба уточнить –

+0

Похоже, что сообщение было отредактировано ... но нет «... long if statement ...» - это ваш оператор if (который был изменен на is (': checked')) ... if (подтвердить ...) вместо подтверждения return() – Cfreak

+0

Извините за то, что вы глупы. Я перешел от вызова элементов по идентификатору к классу, чтобы сделать его короче. Подводя итог, если пользователь нажимает кнопку «# step0Next», чтобы перейти от шага 1 к шагу 2, мне нужна функция для запуска (теперь она), и если «#RT» отмечен, и ни один из флажков с классом «.ex» проверяются, НЕ переходите к шагу 2 и отобразите диалог alert/confirm. Я не вижу, как ваш код запущен, работает ли функция отключена от сообщения? Не могли бы вы показать пример с моим кодом или подобным, мне нужно понять это лучше! –

0

это не сработало. Это сделало:

<script type="text/javascript"> 
    $("#step0Next").live('click', function(event) { 
     $('#step1Prev').click(); //go back to step 1 
     if($('#RT').is(':checked') && !$('.ex').is(':checked')) { 
      if(!confirm("You have not selected any exchanges for which to receive real time market data from. If you continue, you will only receive real time data for market metrics and ten minute delayed data for everything else. Do you wish to continue?")) return; 
      $('#step0Next').die('click'); 
     } 
     $(this).triggerHandler('click'); 
    }); 
</script>