6

ここでは jquery のチェックボックス クリック機能を使用しています。IE 9 if ($(this).is(':checked')) でチェックボックスをクリックすると、アラート メッセージは表示されませんが、IE 10、firefox、および chrome では動作しています。

if (isChildAvail == "true") 
{
    $(this).change(function() {
            if ($(this).is(':checked')) {
            alert("test");
            $(this).parent().parent().append('<div id="divedit" class="editdiv"><p id="p_childlabel" class="childlabel">Children : ' + ChilAvailCount + '   </P><a class="childlabeledit">Edit</a></div>');
            $('.editdiv a').click(function() {
            $(this).parent().parent().append($("#divchildcontrol"));
            EditForPullups();
         });
         }
  }

なにか提案を??

編集:

 $(this).change(function() { 

問題は変更機能にあり、これではありませんif ($(this).is(':checked'))

編集(2):

var strCheck = "";
$('.consumer-communication-checkbox').each(function () {

        strCheck = $(this).parent().text();


        if (strCheck.toLowerCase().indexOf("hugg") >= 0) {

            //scenario without child
            if (isChildAvail == "false") {
                jQuery(':checkbox').change(function () {
                    if ($(this).prop('checked') === true) {
                        $(this).parent().parent().append($("#divchildcontrol"));
                        IsChildcontrolwithH = "1";
                        IsChildcontrolwithG = "0";
                        IsChildcontrolwithP = "0";
                    } else {
                        if (IsChildcontrolwithH == "1") {
                            $("#divpersonalrightheader").append($("#divchildcontrol"));
                        }
                    }
                });
            }
            //scenario with child
            else {
                if ($(this).prop('checked') === true) {
                    //Set SubscribedCode
                    SubscribedCode = "H";
                    $(this).parent().parent().append('<div id="divedit" class="editdiv"><p id="p_childlabel" class="childlabel">Children : ' + ChilAvailCount + '   </P><a class="childlabeledit">Edit</a></div>');
                    $('.editdiv a').click(function () {
                        $(this).parent().parent().append($("#divchildcontrol"));
                        EditForH();
                    });
                }

                jQuery(':checkbox').change(function () {
                    if ($(this).prop('checked') === true) {
                        $(this).parent().parent().append('<div id="divedit" class="editdiv"><p id="p_childlabel" class="childlabel">Children : ' + ChilAvailCount + '   </P><a class="childlabeledit">Edit</a></div>');
                        $('.editdiv a').click(function () {
                            $(this).parent().parent().append($("#divchildcontrol"));
                            EditForH();
                        });
                    } else {
                        $("#divedit").remove();
                        if (IsChildcontrolwithH == "1") {
                            $("#divpersonalrightheader").append($("#divchildcontrol"));
                            IsChildcontrolwithH = "0";
                            IsChildcontrolwithG = "0";
                            IsChildcontrolwithP = "0";
                        }
                    }

                });
            }
        }

EDIT(3) : HTML コンテンツ

   <div class="consumer-checkbox-wrap checked">
                <label class="consumer-communication-label checkbox" for="communication_11">
                    <input name="communication_11" class="consumer-communication-checkbox checkbox" id="communication_11"
                        type="checkbox" checked="checked" value="true"><img src="Images/PMURP_Logos/hugg.jpg">
                s
                    <p>
                        Please send me communications, savings, and special offers from hugg® Communications
                    </p>
                </label>
                <input name="communication_11" type="hidden" value="false"><a href="http://www.hugg.com/email/12162011/SampleNewsletter.html"
                    target="_blank"><img src="../kcsso/images/Newsletter/hugg.jpg"></a>
</div>
 <div class="consumer-checkbox-wrap">
            <label class="consumer-communication-label checkbox" for="communication_13">
                <input name="communication_13" class="consumer-communication-checkbox checkbox" id="communication_13"
                    type="checkbox" value="true"><img src="Images/PMURP_Logos/scott.jpg">

                <p>
                    Please send me communications, savings, and special offers from scott® Communications</p>
            </label>
            <input name="communication_13" type="hidden" value="false"><a href="http://www.scott.com/email/11042011/samplenewsletter.html"
                target="_blank"><img src="../kcsso/images/Newsletter/scott.jpg"></a>
</div>
4

5 に答える 5

6

あなたが投稿したコードには、最後にいくつかの閉じ括弧がありません。単純にすべてをコピーして貼り付けなかったのか、コードが不足していてコードが壊れているのかわかりません。

これはあなたが投稿したものです(インデントを整理した後):

if (isChildAvail == "true") {
    $(this).change(function () {
        if ($(this).is(':checked')) {
            alert("test");
            $(this).parent().parent().append('<div id="divedit" class="editdiv"><p id="p_childlabel" class="childlabel">Children : ' + ChilAvailCount + '   </P><a class="childlabeledit">Edit</a></div>');
            $('.editdiv a').click(function () {
                $(this).parent().parent().append($("#divchildcontrol"));
                EditForPullups();
            });
        }
    }

変更イベント ハンドラの最後がありません ); if ブロックの括弧で囲まれた終了と同様に} :

if (isChildAvail == "true") {
    $(this).change(function () {
        if ($(this).is(':checked')) {
            alert("test");
            $(this).parent().parent().append('<div id="divedit" class="editdiv"><p id="p_childlabel" class="childlabel">Children : ' + ChilAvailCount + '   </P><a class="childlabeledit">Edit</a></div>');
            $('.editdiv a').click(function () {
                $(this).parent().parent().append($("#divchildcontrol"));
                EditForPullups();
            });
        }
    });
}

この(簡略化された)例は、IE9でうまく機能します: http://jsfiddle.net/rT2dT/1/

$(':checkbox').change(function () {
    if ($(this).is(':checked')) {
        alert("test");
    }
});

または、試してください

$(':checkbox').change(function () {
    if ($(this).prop('checked') === true) {
        alert("test");
    }
});

どの jQuery バージョンを使用していますか?

編集: 上からの2番目の編集のフォローアップ:

eachループでイベント ハンドラーをアタッチしているように見えます

$('.consumer-communication-checkbox').each(function () {

そのセレクターは、ページのさまざまなチェックボックスにあると思います。そのeach外観内で、次のように変更ハンドラーをアタッチします。

$(':checkbox').change(...

このセレクターは、スコープ内のチェックボックスだけでなく、ページ全体のすべてのチェックボックスを提供します。ループの各反復で、eachこれらのイベント ハンドラーの 1 つをページ上のすべてのチェックボックスにアタッチします。HTML マークアップを知らなければ、何が起こっているのかを正確に伝えることはできませんが、これが、孤立した例 (JSFiddle.net など) ですべてが期待どおりに機能し、コンテキストでランダムな結果を返す理由です。

于 2013-07-29T09:20:12.603 に答える
3

に置き換え$てみてくださいjQuery。私が間違っているかもしれませんが、別のライブラリが$メカニズムをオーバーライドしているようで、未定義のメソッド呼び出しにつながっています。


更新された更新:

したがって、これは期待どおりに機能しない部分です。

//else {
    $("#divedit").remove();
    if (IsChildcontrolwithH == "1") {
        $("#divpersonalrightheader").append($("#divchildcontrol"));
        IsChildcontrolwithH = "0";
        IsChildcontrolwithG = "0";
        IsChildcontrolwithP = "0";
    }
//}

何も問題はありません。

ただし、ID divpersonalrightheader を持つ要素または ID divchildcontrol を持つ要素のいずれかこの時点で存在しない場合、これは何もしません。もちろん、変数を使用したロジックは正しいと思います。多くのフラグのような変数を処理することを避けるために、これらの変数を削除することをお勧めします。要素の周りにデータを配置する必要がある場合は、 を使用できます。IsChildcontrolwith*$(...).data()

于 2013-07-29T08:02:13.570 に答える
1

is(":checked")どちらも使用している jQuery バージョンでサポートされているため、IE9 でとを使用しても問題はありません$.change(この問題については、どのバージョンでも作業していると思います)。

使用した HTML 構造が提供されていないため、EDIT(2) のスクリプトに基づいていくつかの仮定を作成しました。

  1. クラスごとにいくつかのチェックボックスがありますconsumer-communication-checkbox
  2. これらのチェックボックスはそれぞれ、親要素にラップされています。(divサンプルに使用しました)。
  3. これらのチェックボックス (true または false) に変更イベントをバインドしようとしていますisChildAvailが、親コンテナーに「抱擁」を含むテキストがある場合にのみです。
  4. また、ドキュメントが正しくロードされて準備ができたときにチェックされるチェックボックスのロジックも実行したいと考えています。

これらの仮定で、私はあなたのような単純なコードを作成しました: http://jsfiddle.net/9FtjU/3/

HTML は、上記の 1 番目と 2 番目の仮定に基づいてコーディングされています。JavaScript は単純化されたバージョンです。スクリプトでは、変数isChildAvail;を導入しました。異なる結果を複製する値を変えることができます。

問題は、changeイベントをすべてのチェックボックスにバインドしていた可能性があります。

変更イベントを反復から分離するために、(3 番目と 4 番目の仮定を使用して) さらに単純化しました: http://jsfiddle.net/ub7kS/1/

上記で提供した両方の jsfiddle リンクをテストし、両方とも IE9 で動作します。

===

別の問題として、クリック イベント ハンドラーを確認することもできます。$('.editdiv a')

アップデート

上記の 2 つの jsfiddle リンクを編集しました。これはあなたのスクリプトに似ています: http://jsfiddle.net/hunLQ/ そして、これは別の変更イベントハンドラーと反復を持つものです: http://jsfiddle.net/hunLQ/1/

いずれかをガイドとして自由に変更して使用してください。alertロジックで変更するだけです。

于 2013-08-05T07:17:07.473 に答える
1

それでも動作しない場合は、特定のスクリプトが特定のブラウザで正常に動作しているかどうかを確認する非常に簡単な方法である jquery browser detect を使用してバグを追跡できます。

Js/Jquery を介してブラウザを検出するためのコードは以下のとおりです。

if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1){ //ここにメッセージが入ります}

このコードは Chrome ブラウザー専用です。任意のブラウザー (デスクトップ、モバイル、またはタブレット) に対して定義できます。

于 2013-08-05T07:23:11.300 に答える