如果js中的语句不能正常工作

时间:2013-01-30 11:57:38

标签: javascript jquery html css if-statement

我的if (i>0)声明无效,任何建议为什么不?

http://jsfiddle.net/qup2R/

我希望它能阻止我的初始形式盒子对它做出反应 $('.remove').click(function() if i = 0`

<html>
  <head>
    <script src="jquery.js"></script>
    <script type="text/javascript">
      var i = 0;
      $('document').ready(function () {
        if (i > 0) {
          $('.remove').click(function () {
            i--;
            $(this).closest('form').remove();
          });
        }
        $('.clickme').click(function () {
          if (i < 5) {
            i++;
            $(".form1").last().clone(true, true).appendTo("body");
          } else {
            $(".form1")
          }
        });
      });
    </script>
  </head>

  <body>
     <h3>Invite your friends</h3>

    <form class="form1">
      <input id="email" name="email" />
      <a class="remove" href="#">Remove</a>
      <br/>
      <br/>
      <a class="clickme" href="#">Add</a>
    </form>
  </body>
</html>

3 个答案:

答案 0 :(得分:2)

在点击功能中使用语句并添加&&之类的逻辑运算符以获得准确的结果。

 $('.remove').click(function () {
     if (i > 0 && i < 5 ) {
         i--;
         $(this).closest('form').remove();
     }
 });

 $('.clickme').click(function () {
     if (i < 5 && i > 0) {
          i++;
          $(".form1").last().clone(true, true).appendTo("body");
     }
 });

答案 1 :(得分:2)

再看看你的代码:

    if (i > 0) {
      $('.remove').click(function () {
        i--;
        $(this).closest('form').remove();
      });
    }

这将仅在.remove时将事件处理程序绑定到所有i > 0元素。在DOM就绪时,i == 0因此处理程序从不绑定。您实际想要实现的是在点击i > 0时检查.remove 是否。因此,该检查需要在内部处理程序,而不是在外部。

    $('.remove').click(function () {
      if (i > 0) {
        i--;
        $(this).closest('form').remove();
      }
    });

编辑1:好吧,好像你还在追求其他东西。您希望第一个form不会从页面中删除,因为您不能再添加新表单了。问题是您的i代表页面上的表单数量(减去1,因为您从HTML中已有1个表单开始),而不是插入索引< / em>的。有几种方法可以解决这个问题:

  • 为第一个表单添加一个额外的类,并以克隆的形式删除该类。然后,您可以检查点击的.remove是否是form的孩子,该类与$(this).closest('form').hasClass('firstForm')类似。
  • 仅将.remove链接手动添加到动态生成的表单中。您可以构建一个模板元素,将其存储在变量中,然后将克隆附加到新表单。
  • 检查点击了form的{​​{1}}的索引。如果是第一个,请不要将其删除。

编辑2 :好的,所以您实际上并不关心是否删除了第一个表单,您只是想确保至少有一个表单仍在页面上。这就是你跟踪表格数量的原因。说真的,真的很混乱。如果你至少解释一下你的代码的推理是什么有帮助,评论不是事后的想法!

无论如何,你应该有足够的初始修复(在编辑之上)。

答案 2 :(得分:0)

将jquery更改为此并尝试

$('document').ready(function () {
       var i = 0;
      $('.remove').click(function () {
        if (i > 0) {
          i--;
        $(this).closest('form').remove();
        }
      });

    $('.clickme').click(function () {
      if (i < 5) {
        i++;
        $(".form1").last().clone(true, true).appendTo("body");
      } else {
        $(".form1")
      }
    });
  });