0

ラジオ入力のグループにアタッチされたクリック イベント ハンドラーがあり、既に選択されている (プロパティ 'checked' が設定されている) ラジオ ボタンをクリックしているかどうかを確認したいと考えています。イベント ハンドラーはデイジー チェーン方式で動作すると考えました (最初にクリック時にイベント ハンドラーを呼び出し、次にクリックの既定の動作までチェーンをたどります)。クリックしたばかりのラジオ ボタンでプロパティ 'checked' が true かどうかを評価すると、クリック イベント ハンドラーで常に true が返されるためです。

クリックは既定の動作で既に処理されており、クリックしたラジオ ボタンに「checked」プロパティが既に適用されています。繰り返しますが、クリック イベント ハンドラーはその既定の動作の前に処理されると考えました。さらに奇妙なのは、デフォルトの動作を防止しても、'checked' プロパティに対して true が返されることです。これは、「checked」プロパティが「change」イベントによって処理されているためと思われるため、クリック イベント ハンドラーのデフォルトの動作を妨げても何の影響もありません。

$("input[type='radio']").click(function(e) {
  e.preventDefault();

  alert($(this).prop("checked")); // always returns true; i want prop value immediately prior to click
});

どうすれば自分が求めているものを達成できますか? つまり、クリックされたばかりのラジオ ボタンが既にチェックされているものかどうかを確認するためです。ありがとう。

4

4 に答える 4

2

@Jeffman の応答に基づいて、必要なことのために何かを機能させることができました。カスタム ボタンがありますが、そのうちの 1 つだけを選択できます (したがって、ラジオ ボタンを使用します)。ただし、既に選択されているものをクリックすると、代わりに選択を解除してデフォルト値を選択する必要があります。

私がしなければならなかったこと。ラジオ ラベルで mousedown イベントを処理します。すでに選択されているラジオをクリックしている場合は、デフォルトのボタンを「チェック」に設定します。それ以外の場合は、クリックされたボタンを選択するだけです。これらのボタンの「クリック」イベントを無効にする必要がありました。これは、ラジオ ボタンの不規則な処理を無効にするためです (何らかの理由で、選択を無効にして手動でデフォルトのボタンを選択したときにクリックされたものに戻ります)。 . これは、そこでカスタム ラジオ ボタンのスタイリングを行うため、変更イベントを手動でトリガーする必要があることも意味していました。

$(".radios > label").mousedown(function(e) {

var l = $(this); // label
var t = l.parent(); // container for radio group
var i = l.find("input"); // input element of this label

if(i.prop("checked")) { // clicking on the already selected button
    t.find(".default_radio input").prop("checked", true).trigger("change");     
} else {
    i.prop("checked", true).trigger("change");
}
}).bind('click',false);

$("input[type='radio']").change(function(e) {

    // style the buttons here
});
于 2013-10-27T22:30:09.643 に答える
0

ここにトリックを行うサンプルコードがあります

<script>
$(function() {
    var radios = {};

    $("input[type='radio']").each(function() {
        radios[$(this).uniqueId().attr('id')] = false;
    });
    function resetRadioState() {
        $("input[type='radio']").each(function() {
            radios[$(this).attr('id')] = $(this).is(':checked');
        });
    }
    resetRadioState();
    $("input[type='radio']").click(function(e) {
        alert(radios[$(this).attr('id')]);
        resetRadioState();
    });
})
</script>

<input type="radio" name="group[]"/>
<input type="radio" name="group[]" checked/>
于 2013-10-27T20:58:15.807 に答える
0

false も返す必要があると思います。防ぐだけでなくデフォルト

于 2013-10-27T20:21:47.960 に答える