1

ここでの私の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>
4

3 に答える 3

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");
     }
 });
于 2013-01-30T12:03:00.183 に答える
2

コードをもう一度見てください。

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

これは.removei > 0. DOM の準備ができてi == 0いるので、ハンドラーはバインドされません。実際に達成しようとしているのは、 aがクリックさi > 0 れたとき.removeかどうかを確認することです。したがって、そのチェックはハンドラーの外側ではなく、ハンドラーの内側にある必要があります。

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

EDIT 1:わかりました、あなたは何か他のものを求めているようです. form新しいフォームを追加できなくなるため、最初のフォームをページから削除しないでください。問題は、挿入インデックスではなく、ページ上のフォームの量(HTML に既に 1 つのフォームから開始するため、マイナス 1)をi表すことです。これを回避するには、いくつかの方法があります。

  • 最初のフォームに追加のクラスを与え、複製されたフォームでそのクラスを削除します。次に、クリックしたものが のようなクラスを持つ.removeの子であるかどうかを確認できます。form$(this).closest('form').hasClass('firstForm')
  • .remove動的に生成されたフォームにのみリンクを手動で追加します。変数に格納されたテンプレート要素を構築し、クローンを新しいフォームに追加できます。
  • クリックされた のインデックスを確認しformます。.remove最初の場合は、削除しないでください。

編集 2: わかりました。最初のフォームが削除されたかどうかは実際には気にしません。少なくとも 1 つのフォームがまだページにあることを確認したいだけです。そのため、フォームの量を追跡していました。真剣に、本当に混乱しています。少なくともコードの理由を説明していただければ助かります。コメントは後付けではありません。

とにかく、私の最初の修正(編集の上)で十分なはずです。

于 2013-01-30T12:05:24.953 に答える
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")
      }
    });
  });
于 2013-01-30T12:10:08.520 に答える