0

私はこの jQuery スクリプトを一緒にハックしましたが、警告が発生してはならないときに警告が発生することを除いて、すべて正常に機能しており、その理由がわかりません。

jQuery(document).ready(function(){              
function countDouble() {      

  var d = $("input.double:checked").length;
  var s = $("input.single:checked").length;

    if (s === 1 && d === 2) {

        $("a#proj-btn").attr("href", "#tab2");

    } else {

        $("a#proj-btn").attr("href", "http://www.someurl.com.au/new-cruise-name-home");
        $("#proj-btn").click( function() {
            alert('Please select which projects you are interested in before continuing with enquiry.\nSelect 1 x 1 day project and 2 x 2 day projects by ticking the box beneath your chosen projects.');
        });
    };
}
countDouble();
$(":checkbox").click(countDouble);  
}); 

ここにHTMLがあります

<ul class="tabs">
    <li class="right"><a id="proj-btn" href="#">NEXT &gt;&gt; Cabin Choice</a></li>
</ul>

したがって、1 つの .single チェックボックスがチェックされ、2 つの .double チェックボックスがチェックされている場合、正常に機能するボタンに #tab2 の URL が追加されます。ただし、チェックボックスがオンになっている場合、ボタンをクリックするとアラートが3回表示されます。アラートは、チェックボックスがチェックされていない場合にのみ発生する必要があります。私は何を間違えましたか?私はこれを解決することはできません

4

3 に答える 3

1

呼び出すたびに「クリック」のバインドを解除し、準備ができている関数の外にcountDouble() 引っ張ってみてくださいcountDouble()(おそらく必要ありません)。

function countDouble() {      
  var d = $("input.double:checked").length;
  var s = $("input.single:checked").length;

  //Add This:
  $("#proj-btn").unbind('click');

  if (s === 1 && d === 2) {

        $("a#proj-btn").attr("href", "#tab2");

  } else {

        $("a#proj-btn").attr("href", "http://www.someurl.com.au/new-cruise-name-home");
        $("#proj-btn").click( function() {
            alert('Please select which projects you are interested in before continuing with enquiry.\nSelect 1 x 1 day project and 2 x 2 day projects by ticking the box beneath your chosen projects.');
        });
  };
}
jQuery(document).ready(function(){              
    countDouble();
    $(":checkbox").click(countDouble);  
});
于 2013-01-23T22:55:27.720 に答える
0

イベント ハンドラーの追加を関数の外に移動するには、次のフォームを参照してください。

jQuery(document).ready(function () {
    $("#proj-btn").click(function () {
        alert('Please select which projects you are interested in before continuing with enquiry.\nSelect 1 x 1 day project and 2 x 2 day projects by ticking the box beneath your chosen projects.');
    });

    function countDouble() {
        var d = $("input.double:checked").length;
        var s = $("input.single:checked").length;
        if (s === 1 && d === 2) {
            $("a#proj-btn").attr("href", "#tab2");
        } else {
            $("a#proj-btn").attr("href", "http://www.someurl.com.au/new-cruise-name-home");
        }
    }
    countDouble();
    $(":checkbox").click(countDouble);
});
于 2013-01-23T23:01:23.200 に答える
0
jQuery(document).ready(function(){              
function countDouble() {      

  var d = $("input.double:checked").length;
  var s = $("input.single:checked").length;

    if (s === 1 && d === 2) {

        $("#proj-btn").unbind("click");//changed
        $("a#proj-btn").attr("href", "#tab2");

    } else {

        $("a#proj-btn").attr("href", "http://www.someurl.com.au/new-cruise-name-home");
        $("#proj-btn").click( function() {
            alert('Please select which projects you are interested in before continuing with enquiry.\nSelect 1 x 1 day project and 2 x 2 day projects by ticking the box beneath your chosen projects.');
        });
    };
}
countDouble();
$(":checkbox").click(countDouble);  
}); 
于 2013-01-23T22:59:31.433 に答える