ここに私の問題の例があります:
最後にクリックしたラジオボタンではなく、現在クリックしたラジオボタンを取得するにはどうすればよいですか?
$(function(){
$(".options > label").live("click", function(event)
{
radio_value = $(this).prev("input[type='radio']").val();
$("#clicked").html(radio_value);
});
});
作業サンプル: http://jsfiddle.net/LWcu8/11/
$(".options > label").live("click", function(event)
{
radio_value = $(this).prev(":radio").val();
$("#clicked").html(radio_value);
});
jQuery > 1.7 を使用する場合は、次のように実行できます。
$(".options").on("click", "label", function(event)
{
radio_value = $(this).prev(":radio").val();
$("#clicked").html(radio_value);
});
.prev()
クリックイベントをその前の要素にバインドするためにlabel
必要radio
です。
これを試して:
$(".options > label").live("click", function(event)
{
radio_value = $("#" + $(this).attr('for')).val();
$("#clicked").html(radio_value);
});
$(".options > input[name='size']").live("click", function(event)
{
radio_value = $(this).val();
$("#clicked").html(radio_value);
});
コードは、ラジオの値を取得する前に発生するラベルのクリック イベントをバインドします。input[name='size'] をバインドするだけで機能します。
コールバックを遅らせてみてください:
$(".options > label").live("click", function(event) {
setTimeout(function() {
radio_value = $("input[name='size']:checked").val();
$("#clicked").html(radio_value);
}, 0)();
});
コードを次のように変更します。
$("input[name='size']").live("change", function(event)
{
radio_value = $("input[name='size']:checked").val();
$("#clicked").html(radio_value);
});
イベントは、click
ラジオ ボタンへの変更が発生する前に、ラベルで発生します。そのため、代わりに変更に対応する必要があります。