Может показаться немного странным задавать этот вопрос, поскольку существует несколько решений, но факт в том, что все они выглядят симпатично, и ни одно из того, что мне показалось, не сохраняет правильное значение для ввода формы.
Я ищу что-то, что заменит все радиовходы на div, которые получают специальные классы при наведении или щелчке, а также тип входа, скрытый для каждой группы радиовходов с тем же именем, скрытый вход, который будет обновляться со значением, соответствующим div, на который нажимает пользователь. Длинное предложение, я знаю. Вот что я придумала:
$('input:radio').each(function(){
if (this.style.display!='none') {
var inputName = $(this).attr('name');
var inputValue = $(this).attr('value');
var isChecked = $(this).attr('checked');
if (!$('input:hidden[name='+inputName+']').length)
// if the hidden input wasn't already created
$(this).replaceWith('<div class="inputRadioButton" id="'+inputName+'X'+inputValue+'"></div><input type="hidden" name="'+inputName+'" value="'+inputValue+'" />');
else{
$(this).replaceWith('<div class="inputRadioButton" id="'+inputName+'X'+inputValue+'"></div>');
if (isChecked)
$('input:hidden[name='+inputName+']').attr({'value':inputValue});
}
//this bind doesn't work
$("#"+inputName+"X"+inputValue).click(function(){
if($('input:hidden[name='+inputName+']').val()!=inputValue){
$('input:hidden[name='+inputName+']').attr({'value':inputValue});
$('div[id*='+inputName+'].inputRadioButton').removeClass('inputRadioButtonSelected');
}
if (!$("#"+inputName+"X"+inputValue).hasClass('inputRadioButtonSelected'))
$("#"+inputName+"X"+inputValue).addClass('inputRadioButtonSelected');
});
}
});
Подскажите пожалуйста, как это исправить. Спасибо.
Редактировать Я нашел причину. Обычно он должен работать, но некоторые из моих радиовходов, сгенерированных программным обеспечением для электронной коммерции, содержали скобки (например, id [12]), и jQuery это анализировал. Исправление добавляет
var inputButton = document.getElementById(inputName+"X"+inputValue);
перед привязкой и заменой $("#"+inputName+"X"+inputValue)
на $(inputButton)
.