Я ищу обобщенное решение для этого.
Рассмотрим 2 входа типа радио с одинаковым именем. При отправке проверяется значение, которое отправляется с формой:
<input type="radio" name="myRadios" onchange="handleChange1();" value="1" />
<input type="radio" name="myRadios" onchange="handleChange2();" value="2" />
Событие изменения не срабатывает, если переключатель не выбран. Поэтому, если радио со значением = "1" уже выбрано, а пользователь выбирает второе, handleChange1 () не запускается. Это представляет проблему (для меня в любом случае) в том, что нет никакого события, где я могу поймать этот отбор.
То, что я хотел бы, это обходной путь для события onchange для значения группы флажков или, в качестве альтернативы, событие oncheck, которое обнаруживает не только когда радио проверено, но также и когда оно не проверено.
Я уверен, что некоторые из вас сталкивались с этой проблемой раньше. Какие есть обходные пути (или в идеале, как правильно это сделать)? Я просто хочу поймать событие изменения, получить доступ к ранее проверенному радио, а также к недавно проверенному радио.
PS
onclick выглядит как лучшее (кросс-браузерное) событие, указывающее, когда радио проверено, но оно все еще не решает не проверенную проблему.
Я полагаю, что имеет смысл, почему onchange для типа флажка работает в подобном случае, так как оно изменяет значение, которое оно отправляет, когда вы проверяете или снимаете флажок. Я бы хотел, чтобы переключатели вели себя как замена элемента SELECT, но что вы можете сделать ...
источник
myRadios
чтобы прочитать переменную,prev
которая содержит текущую выбранную радиостанцию. Сравнение выполняется в каждом обработчике кликов, чтобы определить, совпадает ли радио, на которое нажали, с тем, которое хранится в,prev
и если нет, то в нем хранится радио, на которое щелкают в данный момент. В обработчике кликов у вас есть доступ к ранее выбранному:prev
и текущему выбранному радио:this
rad[i].addEventListener('change', function(){ //your handler code })
и он будет работать как для мыши, так и для клавиатурыЯ бы сделал два изменения:
onclick
обработчик вместоonchange
- вы изменяете «проверенное состояние» радиовхода, а не тоvalue
, чтобы не происходило событие изменения.this
в качестве параметра, что позволит легко проверить, какое значение выбрано в данный момент.ETA: Наряду с вашей
handleClick()
функцией вы можете отслеживать оригинальное / старое значение радио в переменной области просмотра. То есть:источник
onclick
обработчик просто назван плохо - он обрабатывает событие выбора радиокнопки, независимо от того, нажата ли кнопка, нажата или активирована нажатием «enter» на клавиатуре.onchange
Обработчик не подходит в данном случае , так как значение входного сигнала не меняется, только проверенным / непроверенной атрибут. Я добавил пример сценария для решения предыдущего значения.Как вы можете видеть из этого примера: http://jsfiddle.net/UTwGS/
HTML:
JQuery:
как
click
иchange
события запускаются при выборе опции кнопки радио (по крайней мере в некоторых браузерах).Я также должен отметить, что в моем примере
click
событие все еще вызывается, когда вы используете вкладку и клавиатуру для выбора опции.Итак, моя точка зрения заключается в том, что, хотя
change
событие запускается некоторыми браузерами,click
событие должно обеспечить покрытие, которое вам нужно.источник
console.log
в моем коде есть утверждение, которое IE7 не поддерживает. Вы можете просто предупредить об этом в IE, если хотите.click
иchange
обработчики событий, вы в конечном итоге вызовете обработчик дважды. В этом случае, поскольку @Matthew касается предыдущего значения, это может привести к плохим последствиям.click
здесь правильный обработчик и единственный, который вам нужен. Ваша редакция проясняет это, поэтому я убираю свой отрицательный голос.Как насчет использования события изменения Jquery?
jsfiddle: http://jsfiddle.net/f8233x20/
источник
$(this).val()
также может быть заменен нативным javascripte.currentTarget.value
, где e - объект события, переданный через функцию обратного вызова.Как вы можете видеть здесь: http://www.w3schools.com/jsref/event_onchange.asp Атрибут onchange не поддерживается для переключателей.
Первый связанный с вами вопрос SO дает вам ответ: используйте
onclick
событие вместо этого и проверьте состояние переключателя внутри функции, которую оно вызывает.источник
onclick
это не та же самая семантика, поскольку вы можете изменить проверяемость переключателя с помощью ввода с клавиатуры, если выбран выбор формы клавиатуры.Я не думаю, что есть какой-то другой способ, кроме сохранения предыдущего состояния. Вот решение с JQuery
Подумав об этом немного больше, я решил избавиться от переменной и добавить / удалить класс. Вот что я получил: http://jsfiddle.net/BeQh3/2/
источник
Да, нет события изменения для выбранной в данный момент радиокнопки. Но проблема в том, что каждый переключатель выбран в качестве отдельного элемента. Вместо этого радиогруппа должна рассматриваться как отдельный элемент, как
select
. Таким образом, событие изменения запускается для этой группы. Если этоselect
элемент, мы никогда не беспокоимся о каждой опции в нем, а выбираем только выбранную. Мы сохраняем текущее значение в переменной, которая станет предыдущим значением при выборе новой опции. Точно так же вы должны использовать отдельную переменную для хранения значения проверенного переключателя.Если вы хотите идентифицировать предыдущий переключатель, вы должны выполнить цикл по
mousedown
событию.увидеть это: http://jsfiddle.net/diode/tywx6/2/
источник
Сохраните предыдущее проверенное радио в переменной:
http://jsfiddle.net/dsbonev/C5S4B/
HTML
JS
JS ПРИМЕРНЫЙ КОД
источник
Я понимаю, что это старая проблема, но этот фрагмент кода работает для меня. Возможно, кто-то в будущем найдет это полезным:
источник
onkeydown="radioChange('juju','button1',radioArray);"
вы также можете захватить, когда пользователь использует пространство для проверки радио.Это просто не в моей голове, но вы можете сделать событие onClick для каждой радиокнопки, присвоить им разные идентификаторы, а затем создать цикл для события, чтобы просмотреть каждую радиокнопку в группе и найти был проверен, посмотрев на атрибут «флажок». Идентификатор отмеченного будет сохранен как переменная, но вы можете сначала использовать временную переменную, чтобы убедиться, что значение этой переменной изменилось, так как событие click будет запускаться независимо от того, была установлена новая радиокнопка или нет.
источник
источник
Если вы хотите избежать встроенного скрипта, вы можете просто прослушать событие клика по радио. Это может быть достигнуто с простым Javascript, прослушивая событие щелчка на
источник
Вы можете добавить следующий скрипт JS
источник
это работает для меня
источник
Это самая простая и эффективная функция, которую можно использовать, просто добавьте столько кнопок, сколько вы хотите, в флажок флажок = false и сделайте событие onclick каждой кнопки-переключателя для вызова этой функции. Назначьте уникальный номер каждой радиокнопке
источник
Самый простой и мощный полный путь
только для чтения радиовходов с использованием getAttribute
источник