-2

次のコードでボタンのテキストを変更しようとしています。

// hide unavailable courses
$("#availability_button").click(function () {
    $(".availability_red").toggle();
        if ($(this).val('Show Unavailable')){
            $(this).html('Hide Unavailable');
        } else {
            $(this).html('Show Unavailable');
        }
});

ボタンのテキストは、初めて使用したときに変更されますが、二度と変更されません。それがなぜなのかわからないので、JSのデバッグ知識の限界にかなり達しました。

私はそれにアラートを入れて、それが他のパスに決して到達しないことを証明しました。

私は何が間違っているのですか?

4

3 に答える 3

4

jQueryオブジェクトを返し、オブジェクトは真の(与える)値でtrueあるため、常に評価されます。.val(val)ToBooleantrue

また、あなたは.val()おそらくあなたがチェックしたいのに対して、あなたは使用しています.html()

これを試して:

if ($(this).html() === 'Show Unavailable') {
    $(this).html('Hide Unavailable');
} else {
    $(this).html('Show Unavailable');
}

デモhttp://jsfiddle.net/jfetf/

于 2012-08-01T17:13:03.437 に答える
3

$(this).val("Show Unavailable")値を設定してオブジェクトを返す場合、同等性をチェックしていません。

$(this).val() == "Show Unavailable"代わりに試してください。現在の値を取得し、文字列と比較します。

于 2012-08-01T17:13:17.347 に答える
0

$(this).val('Show Unavailable')jQuery objectとして解釈されるリターンtrue

また、$(this).val('Show Unavailable')は、要素に値を設定します。

于 2012-08-01T17:14:07.927 に答える