JQuery $( "# radioButton" ). изменить (...) не стрелять во время отбраковки
Около месяца назад вопрос Митса остался без ответа. К сожалению, я сейчас вхожу в ту же ситуацию.
http://api.jquery.com/change/#comment-133939395
Возникает ситуация: Im использует jQuery для записи изменений в переключателе. Когда переключатель выбран, я включаю окно редактирования. Когда переключатель отключен, я бы хотел, чтобы окно редактирования было отключено.
Разрешительные работы. Когда я выбираю другой переключатель в группе, событие change
не запускается. Кто-нибудь знает, как это исправить?
<input type="radio" id="r1" name="someRadioGroup"/>
<script type="text/javascript">
$("#r1").change(function () {
if ($("#r1").attr("checked")) {
$('#r1edit:input').removeAttr('disabled');
}
else {
$('#r1edit:input').attr('disabled', true);
}
});
</script>
Ответы
Ответ 1
Похоже, функция change()
вызывается только при проверке переключателя, а не при снятии отметки. Решением, которое я использовал, является привязка события изменения к каждому переключателю:
$("#r1, #r2, #r3").change(function () {
Или вы можете дать всем переключателям одинаковое имя:
$("input[name=someRadioGroup]:radio").change(function () {
Вот рабочий пример jsfiddle (обновленный от комментария Криса Портера.)
В комментарии @Ray вам следует избегать использования имен с .
в них. Эти имена работают в jQuery 1.7.2, но не в других версиях (пример jsfiddle.).
Ответ 2
<input id='r1' type='radio' class='rg' name="asdf"/>
<input id='r2' type='radio' class='rg' name="asdf"/>
<input id='r3' type='radio' class='rg' name="asdf"/>
<input id='r4' type='radio' class='rg' name="asdf"/><br/>
<input type='text' id='r1edit'/>
часть jquery
$(".rg").change(function () {
if ($("#r1").attr("checked")) {
$('#r1edit:input').removeAttr('disabled');
}
else {
$('#r1edit:input').attr('disabled', 'disabled');
}
});
здесь DEMO
Ответ 3
Вы можете привязываться ко всем переключателям сразу по имени:
$('input[name=someRadioGroup]:radio').change(...);
Рабочий пример:
http://jsfiddle.net/Ey4fa/
Ответ 4
Это нормально работает для меня:
if ($("#r1").is(":checked")) {}
Ответ 5
Моя проблема была похожа, и это сработало для меня:
$('body').on('change', '.radioClassNameHere', function() { ...
Ответ 6
Скажем, эти радиокнопки находятся внутри div
с идентификатором radioButtons
и что радиокнопки имеют одинаковое имя (например, commonName
), а затем:
$('#radioButtons').on('change', 'input[name=commonName]:radio', function (e) {
console.log('You have changed the selected radio button!');
});
Ответ 7
С Ajax, я работал:
Html:
<div id='anID'>
<form name="nameOfForm">
<p><b>Your headline</b></p>
<input type='radio' name='nameOfRadio' value='seed'
<?php if ($interviewStage == 'seed') {echo" checked ";}?>
onchange='funcInterviewStage()'><label>Your label</label><br>
</form>
</div>
JavaScript:
function funcInterviewStage() {
var dis = document.nameOfForm.nameOfRadio.value;
//Auswahltafel anzeigen
if (dis == "") {
document.getElementById("anID").innerHTML = "";
return;
} else {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("anID").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET","/includes/[name].php?id="+dis,true);
xmlhttp.send();
}
}
И php:
//// Get Value
$id = mysqli_real_escape_string($db, $_GET['id']);
//// Insert to database
$insert = mysqli_query($db, "UPDATE [TABLE] SET [column] = '$id' WHERE [...]");
//// Show radio buttons again
$mysqliAbfrage = mysqli_query($db, "SELECT [column] FROM [Table] WHERE [...]");
while ($row = mysqli_fetch_object($mysqliAbfrage)) {
...
}
echo"
<form name='nameOfForm'>
<p><b>Your headline</b></p>
<input type='radio' name='nameOfRadio' value='seed'"; if ($interviewStage == 'seed') {echo" checked ";} echo" onchange='funcInterviewStage()'><label>Yourr Label</label><br>
<input type='radio' name='nameOfRadio' value='startup'"; if ($interviewStage == 'startup') {echo" checked ";} echo" onchange='funcInterviewStage()'><label>Your label</label><br>
</form> ";
Ответ 8
Событие change
, не срабатывающее при отмене выбора, является желаемым поведением. Вы должны запускать селектор по всей группе радиостанций, а не только по одному переключателю. И ваша радиогруппа должна иметь то же имя (с разными значениями)
Рассмотрим следующий код:
$('input[name="job[video_need]"]').on('change', function () {
var value;
if ($(this).val() == 'none') {
value = 'hide';
} else {
value = 'show';
}
$('#video-script-collapse').collapse(value);
});
У меня есть тот же вариант использования, что и ваш, т.е. показывать поле ввода при выборе определенного переключателя. Если событие было уволено также и при отмене выбора, я получал бы 2 события каждый раз.
Ответ 9
Такая же проблема здесь, это сработало отлично:
$('input[name="someRadioGroup"]').change(function() {
$('#r1edit:input').prop('disabled', !$("#r1").is(':checked'));
});