2010-08-03 281 views
0

我有一个确认对话框,在您点击表格向导(“#step0Next”)后弹出。目前它在您点击下一步的按钮后弹出。当你按下THAT步骤(步骤1)时,我不需要它弹出,而不是当它进入步骤2.如何在对话框中点击“确定”之前停止按钮的默认动作?帮助与防止默认

$("#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');'将永远不会执行,因为您之前返回。你有演示页面吗?不知何故,很难想象什么是错的。 – 2010-08-03 18:36:58

+0

我加了班,好点。如何在进行之前使其在同一步骤中弹出。另外,thx帮助缩进代码。 – 2010-08-03 18:40:09

+0

无论如何这个按钮是什么?提交按钮? 'event.preventDefault();'应该工作... – 2010-08-03 18:42:20

回答

0

confirm()没有默认操作。而不是返回它,你需要检查它的返回值后,防止默认值。 (我并不完全遵循你的问题,但我假设你想在用户点击确定后继续......不是“停止默认操作”?)

从现在的位置删除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')?请澄清 – 2010-08-03 18:59:10

+0

看起来消息是编辑过的......但是没有“... long if语句...”是你的if语句(已被更改为(':checked'))... if(confirm ...)而不是返回确认() – Cfreak 2010-08-03 20:15:27

+0

对不起,很愚蠢。我改变了从ID调用元素到一个类来缩短它。总结一下,如果用户点击“#step0Next”按钮从步骤1到步骤2,我需要运行该函数(现在就运行),如果选中了“#RT”,并且没有一个类为复选框'.ex'被检查,不要转到步骤2并显示警告/确认对话框。我没有看到你的代码是如何工作的,它是基于消息的功能吗?你能不能用我的代码或类似的东西来展示一个例子,我需要更好地理解这一点! – 2010-08-03 20:39:29

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>