【问题标题】:jQuery broken function after added new function添加新功能后jQuery损坏的功能
【发布时间】:2010-05-09 09:20:47
【问题描述】:

这里有什么问题?在我添加这个新功能之前,警报功能一直有效。

我做错了什么吗?它只是不再触发警报。

<input value="1"  type="checkbox" name="salgsvilkar" id="checkbox2"  style="float:left;"
        />

    {literal}
             <script src="http://code.jquery.com/jquery-latest.js"></script>
                <script type="text/javascript">
    $(function() {
       //checkbox
       $("#scrollwrap").click(function(){
        $("#scrollwrap").toggleClass('highlight');
        });​
    });

    $(function(){
       //button
       $("#fullfor_btn").click(function(e){
           if(!$("#checkbox2").is(':checked') == false)
           {
               alert("Please accept the terms of sale."); 
               e.preventDefault();
           }
       });
     });
    </script>
      {/literal}


<button type="submit" class="submit" name="{$method}" id="fullfor_btn" title="Fullfør bestillingen nå" value="">&nbsp;</button>

【问题讨论】:

    标签: php jquery html css


    【解决方案1】:

    代替:

    if(!$("#checkbox2").is(':checked') == false) {
    

    为什么不直接使用更具可读性的:

    if($("#checkbox2").is(':checked')) {
    

    编辑:如果您的意图是在复选框选中时触发警报:

    if(!$("#checkbox2").is(':checked')) {
    

    【讨论】:

    • 因为如果不选中该框,则必须出现警报。
    • @Kyle - 在这种情况下,问题在于该声明:)。摆脱== false
    • 谢谢 :) 所以如果它有 ! 表示 not?
    • 是的,我已经在我发布的示例中更正了这一点。 ! 是否定的
    • @Kyle - 是的,!表示未检查,所以!$("#checkbox2").is(':checked') 表示 已检查,因此!$("#checkbox2").is(':checked') == false 表示已检查是一种非常冗长且令人困惑的方式。
    【解决方案2】:

    正如 karim79 所说,您的逻辑可能不是您想要的。

    if(!$("#checkbox2").is(':checked') == false)
    

    功能相同

    if($("#checkbox2").is(':checked') == true)
    

    所以你的警报只会在复选框被选中时触发。

    【讨论】:

      【解决方案3】:

      在您的示例中,您可以将所有代码放在同一个 $(function(){ code }) 中,您将文档设置为两次

       $(function() {
         //checkbox
         $("#scrollwrap").click(function(){
          $("#scrollwrap").toggleClass('highlight');
         });​
      
         //button
         $("#fullfor_btn").click(function(e){
             if($("#checkbox2").is(':checked'))
             {
                 alert("Please accept the terms of sale."); 
                 e.preventDefault();
             }
         });
       });
      

      【讨论】:

      • 谢谢,我添加了双重文档,准备看看它是否会强制警报,但即使删除它,警报仍然不会触发。
      • 你的代码工作得很好,我认为你的代码中的其他地方有冲突。我只能看到if(!$("#checkbox2").is(':checked') == false) 可能只是:if($("#checkbox2").is(':checked'))
      • 这是一个有争议的问题,因为 jQuery 事件处理程序不会相互覆盖。两个处理程序都将被附加。试试看。
      • @nick:我知道它有效,它只是一种优化,主要问题是双重否定的 if。为什么投反对票?
      【解决方案4】:

      为我工作。

      虽然在复选框被选中而不是在未选中时触发警报似乎有点奇怪。

      【讨论】:

        猜你喜欢
        • 2014-11-01
        • 1970-01-01
        • 2012-10-21
        • 1970-01-01
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多