Если вы хотите, чтобы оно было немного более общим, вы можете сделать это на основе значения, например:
$("#question_one :radio[name=question_1]").change(function() {
$("div.show_answer").hide();
$("#q1_" + $(this).val()).show(100);
});
Вы можете попробовать здесь , илиесли вам нужно более общее, скажем, у вас есть несколько вопросов, просто оберните каждый из блоков HTML выше в контейнере, например <div class="question"></div>
, тогда вы можете сделать что-то вроде этого:
$(".question :radio[name=question_1]").change(function() {
$(this).closest(".question").find("div.show_answer").hide()
.filter("[id$='" + $(this).val() +"']").show(100);
});
Вы можете проверить эту версию здесь , она будет работать для нескольких вопросов без дублирования вашего кода для каждого.
Для комментариев: Чтобы убить ее после первого нажатияу вас есть несколько вариантов, вы можете отключить их, добавив их в обработчик ( test here ):
$(this).closest('li').find(':radio').attr('disabled', true);
Или, если вы хотите включить изменение, но не отображать ответ снова,просто отвяжите их ( тест здесь ):
$(this).closest('li').find(':radio').unbind('change');