0

そのため、コードに奇妙な動作があり、その理由がわかりません。

たとえば、チェックボックスは次のようになります。

<label>Check Boxes</label>
    <div class="input_group">
      <div class="checker"><span><input style="opacity: 0;" name="option" value="option 1" type="checkbox"></span></div>First option<br>
      <div class="checker"><span><input style="opacity: 0;" name="option" value="option 2" type="checkbox"></span></div>Second option<br>
      <div class="checker"><span><input style="opacity: 0;" name="option" value="option 3" type="checkbox"></span></div>Third option
    </div>

そのため、check オプションがチェックされている場合、親スパンは「checked」クラスを追加します。

そこで、ユーザーがユーザーを追加し、そのユーザーの新しいアドレスを作成するか、会社のアドレスを使用するかを選択できるシステムを開発しようとしていました。

両方のアドレスが異なる div に読み込まれ、会社のアドレスが非表示になるため、これが私が作成した関数です。

$('input[name="company_addr"]').change(function(){
            var checked = $(this).is(':checked');
            $('input[name="company_addr"]').each(function(){
                $(this).attr('checked',checked);
                if (checked)
                    $(this).parent().addClass('checked');
                else
                    $(this).parent().removeClass('checked');
            });
            if (checked){
                newAddrContent = block_new.html();
                block_new.html(block_company.html());
            }
            else{
                block_new.html(newAddrContent);
            }
        });

最後の if ... else を削除して会社の住所を再表示すると、両方のチェックがどのように変更され、その部分が問題なく機能するかがわかります。

ただし、block_new 内のチェックボックスは機能しなくなりましたが、block_company のチェックボックスは機能します。会社(非表示にする必要があります)をクリックすると、もう一方の会社はチェックを外したりチェックしたりしませんが、コンテンツは適切に置き換えられます。

何が起こっているのでしょうか?

4

3 に答える 3

0

最後に、ここにコメントされているuniformjsのバグのようです:github.com/pixelmatrix/uniform/issues/180

私がこの問題をどのように解決したかに興味がある場合は、適切な div を表示、非表示にする方法を変更したので、フォームを送信するときに、どの div が非表示になっているかを確認し、これを考慮してフォームを処理します。

于 2011-09-03T10:46:45.823 に答える
0

1 回限りの関数である check() を使用します。ハンドラーが将来の要素で機能するには、ライブ イベントを .live(event, function) にバインドする必要があります。

したがって、次の代わりに:

$(elements).change();

使用する

$(elements).live('change', function() {
...
});
于 2011-09-02T20:49:29.437 に答える
0

input問題は、その場で新しいイベントを作成すると、changeイベントがリバウンドされないことです。ドキュメントを使用してこれを修正できます.delegate

$('.input_group').delegate('input[name="company_addr"]', 'change', function(){
             //do your stuff
});

デリゲート オーバー ライブを使用する理由

于 2011-09-02T20:49:51.417 に答える