1

私はこれの非常に多くの異なる組み合わせを試しましたが、それらはすべて正しく機能していないようで、私の構文にあるものでなければならないことを知っています....

基本的に、チェックボックスの行があります。10 月から 3 月までの月。チェックボックスが 1 つだけオンになっていて、それらのチェックボックスの 1 つが 10 月または 3 月のいずれかである場合、トリガーされます。

これが私のコードです。(私はすでに noofmonths を正しく取得できています。)

if (noofmonths == "1" && ( $('#month_oct:checked') || $('#month_mar:checked') )) {
        tempbase = tempbase + 200;
    }
alert(tempbase);

私が抱えている問題は、私がチェックした月を気にしないように見えることです. 月に関係なく、常に 200 を追加しています.... noofmonths は正しく機能しますが、複数のチェックボックスをオンにすると、これがトリガーされないためです。

ここで何が欠けていますか?助けてくれてありがとう!

4

4 に答える 4

5

問題は、$('someselector')要素が一致しない場合でも、常に jQuery オブジェクトを返すこと'someselector'です。そして、空のオブジェクトであっても、すべてのオブジェクトは「真実」です。

あなたがすべきことは次のいずれかです:

if (noofmonths == "1" && ( $('#month_oct:checked').length > 0
                        || $('#month_mar:checked').length > 0 )) {

// OR

if (noofmonths == "1" && ( $('#month_oct').is(':checked')
                        || $('#month_mar').is(':checked')) {

一致する要素がない場合、結果の jQuery オブジェクトlengthは になります0。一方.is()、メソッドはブール値を返します。

そうは言っても、その効果を得るための別の方法を検討したいと思います。チェックボックスの行全体に共通のクラスを与え (既にname属性を共有していない限り?)、特別なもの (10 月と 3 月) に追加のクラスを与えます。

<input type="checkbox" class="month" value="Jan">
...
<input type="checkbox" class="month oneonly" value="Mar">
...

それからあなたはこれを行うことができるからです:

var $checked = $(".month:checked");
if ($checked.length === 1 && $checked.hasClass("oneonly")) {
    ...

つまり、最初にすべてのチェックボックスを$checked変数に取得し、次に番号が 1 で、その番号が 3 月または 10 月としてマークするクラスを持っている場合... そうすれば、将来 7 月も突然「特別」になった場合に、 「oneonly」クラス (または任意の名前) を HTML の July に追加するだけで、JavaScript をまったく変更する必要はありません。

于 2012-08-11T13:13:56.817 に答える
1

length次のプロパティを使用できます。

var len = $('#month_oct:checked, #month_mar:checked').length;
if (noofmonths == "1" && len > 0) {
    tempbase = tempbase + 200;
}

デモ

于 2012-08-11T13:13:46.643 に答える
0

一致したクエリの長​​さをテストする必要があります。

if (noofmonths == "1" && ( $('#month_oct:checked').length || $('#month_mar:checked').length )) {
于 2012-08-11T13:13:38.640 に答える
0

チェックボックスを選択しているだけで、実際にチェックされているかどうかを確認していません。

if (noofmonths == "1" && ( $('#month_oct')[0].checked || $('#month_mar')[0].checked )) {
    tempbase = tempbase + 200;
}

または$('#month_oct').is(':checked');ブール値も返すか、実際にチェックボックスを選択して、他の回答のようにセレクターに長さがあるかどうかを確認できます。

于 2012-08-11T13:15:16.473 に答える