1

ボタンのオン/オフ ペアに jQuery UI ボタン​​セットを使用しています。クリックを処理して、2 つのボタンのいずれかをクリックすると、さらに選択できるダイアログが表示され、その後、ボタンが新しい状態でページがリロードされます (状態が変更された場合、状態が変更されない場合があります)。場合があります)。

問題は、クリック ハンドラーが呼び出される前に、クリックしたボタンが選択されたようにスタイル設定されることです。選択を変更したくないので、手動で行いたいです。

クリックイベントはjQuery UIが作成するラベルにバインドされているようで、バインド解除に少し苦労しています。関数なしでスタイルを取得する他の方法があるかどうかも尋ねていると思います...ボタンセットはイベントハンドラーを提供しないため、とにかくクリックイベントを自分でキャッチする必要があります。

私が今考えている解決策は、ボタンセットが生成するhtmlをコードにコピーし、cssを保持してボタンセット呼び出しを削除することです。ただし、あきらめる前に StackOverflow をチェックする価値があると思いました。:)

4

1 に答える 1

3

jQuery UI は、実際の選択が行われる前に実行されるイベントをトリガーしないため、これを達成するための回避策は比較的ハックになります。私が思いつく最良のアイデアは、以前に選択したオプションをプログラムで記憶し、clickjQuery UI の新しいボタンの選択を元に戻すかどうかを決定するハンドラーをアタッチすることです。

$('#parent_container').buttonset();
var selectedButton = $('#parent_container :checked');
$('.ui-button').on('click', function() {
    setTimeout(function() {
        //Insert your actual check here.
        if (true) {
            selectedButton.attr('checked', true);
            $('#radio').buttonset('refresh');
        } else {
            selectedButton = $('#parent_container :checked');
        }
    }, 1);
});​

これsetTimeoutは、jQuery UI のクリック ハンドラーの後に実行されるようにするために必要です。ダイアログを表示しているので、選択を即座に元に戻すためにこれを変更する必要があるかもしれませんが、将来の使用のためにユーザーが何を選択しようとしたか覚えておいてください。

ここにユーザーの選択を常に拒否する例があります- http://jsfiddle.net/tj_vantoll/s6XTu/14/

明らかに、これは理想的なアプローチではありませんが、機能します。jQuery UI は、実際には選択イベントのサポートを追加する必要があります。私はこれについてチケットを提出することを回避しようとします。ボタン プラグインは、1.11 で一部更新される予定です - http://wiki.jqueryui.com/w/page/12138038/Roadmap

于 2012-07-05T15:35:43.877 に答える