0

私は現在、多くの問題を引き起こしているjQueryスクリプトに取り組んでいます。私はフレームワークの専門家ではありませんが、過去に何度か使用して成功しました。

サブフォームのサブフォームとなるものを設定しようとしています。つまり、ユーザーはアンケートに記入しています。ユーザー入力に基づいて、追加のフォーム フィールドが表示されます。この場合、その入力に基づいて、より多くのフィールドが表示されます。

この場合、制御要素を検索し、何かを変更イベントにバインドするスクリプトをロードします。このアプローチは、最初のフォーム フィールドでは機能しますが、別のフォーム フィールドでは機能しません。コンテンツは、ajax 経由ではなく、残りの html と共に読み込まれます。本当に奇妙な部分は、デバッガーを使用してコンソールを見ていると、以下のスクリプトが必要な要素を見つけて、change() を呼び出そうとすることがわかりますが、イベントは発生しません!

$('td.subFormYesControl input.CodebtorParentQuestion').each(function() {
    console.log("Hit");
    //alert($(this).prop('class'));
    $(this).on("change", function() {
        if ($(this).val() == "1") {
            $(this).parents('tbody').eq(0).children('tr.subFormRow').show();
            $(this).parents('tbody').eq(0).siblings('tbody.CodebtorSubForm').show();
        } else {
            $(this).parents('tbody').eq(0).children('tr.subFormRow').hide();
            $(this).parents('tbody').eq(0).siblings('tbody.CodebtorSubForm').hide();
        }
    });
});​

私は試行錯誤のテストを行ってきましたが、ほとんど運がありませんでした。これをラップインから変更$(document).ready()する$(window).load()と、FF では機能しますが、IE では機能しません。

何が起こっているのか誰にも分かりませんか?

編集:すべての助けをありがとう!私が使用している実装には生成された html がたくさんあるので、これが私が操作しようとしているコントロールの親要素です。もっと役立つかどうか教えてください!

<td class="subFormYesControl"><input type="radio" value="1" id="c1_CodebtorsParent[0]0" class="CodebtorParentQuestion" name="c1_CodebtorsParent[0]"><label for="c1_CodebtorsParent[0]0">Yes</label><br><input type="radio" checked="checked" value="0" id="c1_CodebtorsParent[0]1" class="CodebtorParentQuestion" name="c1_CodebtorsParent[0]"><label for="c1_CodebtorsParent[0]1">No</label><br></td>

編集 2: もっと奇妙に思えますが、手がかりを見つけたと思います。以下に示すように簡単なアラートを追加すると:

        alert($(this).prop('class'));
        $('td.subFormYesControl input.CodebtorParentQuestion').each(function() {


    $(this).on("change", function() {
        console.log($(this).length);
                    if($(this).val() == "1") {
                        $(this).parents('tbody').eq(0).children('tr.subFormRow').show();
                        $(this).parents('tbody').eq(0).siblings('tbody.CodebtorSubForm').show();
                    } else {
                        $(this).parents('tbody').eq(0).children('tr.subFormRow').hide();
                        $(this).parents('tbody').eq(0).siblings('tbody.CodebtorSubForm').hide();
                    }                    
            });
        });

コードは機能しているようです!アラートを削除すると、機能しなくなります!!! 何か案は????


皆様、ご協力ありがとうございました。私は jsfiddle を準備し、一見無関係なプラグインをいくつか削除していました。それらの 1 つである intellitext ツールを削除すると、コードはすべてのブラウザーで問題なく動作するようになりました。私はテストを経て、コードを document.ready にプッシュすることさえできたので、回答済みとしてマークし、プラグインの互換性の問題/バグに分類しようと思います。

みんなありがとう

4

3 に答える 3

0

HTMLサンプルとjQueryコードをテストしました。興味深いことに、2つの無線入力を使用しました。これらの2つの入力は同時に変化するか、いずれかが他の1つの変化と切り替わります。単純に、自分の値を1に変更すると、他の人の値が自動的に0に変更されます。

またif ($(this).val() == "1") 、一方の値が1に変更され、もう一方の値が0に変更された場合にも、これを使用しました。したがって、両方の変更は実際には最初に表示されてから非表示になり、イベントが発生していないように見えます。

于 2012-04-16T19:55:10.230 に答える
0

コメントアウトするか、console.log()行を削除します。スクリプトの実行時に開発者ツールが開いていない限り、IEはそれを窒息させます。

于 2012-04-16T19:57:18.860 に答える
0

以下の使い方はいかがでしょうか?

$(this).live ("change", function() {
    //...
});
于 2012-04-16T19:24:39.230 に答える