関連する質問がこのサイトや他の場所に既にいくつかありますが、どの回答も私の状況には当てはまらないようです。HTMLにはたくさんのラジオボタンがあります。
<input type="radio" name="b1" value="aa"> aa<br>
<input type="radio" name="b1" value="ab"> ab<br>
<input type="radio" name="b1" value="ac"> ac<br>
<input type="radio" name="b2" value="ba"> ba<br>
<input type="radio" name="b2" value="bb"> bb<br>
<input type="radio" name="b2" value="bc"> bc<br>
<script type="text/javascript">
var PK = {
modes: ["b1", "b2"],
init: function() {
// attach actions to radio buttons
for (var key in this.modes) {
var mode = this.modes[key];
$("input[name='" + mode + "']").bind(
"change",
function() {
PK[mode]($("input[name='" + mode + "']:checked").val());
}
);
}
},
b1: function(val) { .. do something .. },
b2: function(val) { .. do something else .. },
};
$(document).ready(function() {
PK.init();
});
</script>
上記はまったく機能しません。.bind の代わりに .live を試しましたが、それでも期待どおりに動作しません。実際、どちらもアクションをモードの最後のエントリ (上記の「b2」) にバインドします。つまり、b1 または b2 ボタンの値を変更するかどうかにかかわらず、関数 PK.b2() が起動されます。モードのエントリを逆にすると、最後のエントリが値を取ります。上記をうまく達成するにはどうすればよいですか?