У меня следующая проблема:
У меня есть форма, которую мне нужно сериализовать, но я использую javascript, чтобы изменить внешний вид полей выбора.Это означает, что реальные поля выбора скрыты с помощью display: none.Моя проблема в том, что jQuery распознает скрытые выборки, но сериализует только первое значение, а не выбранное.
<select name="publish"><br>
<option value="1">yes</option><br>
<option value="2" selected="selected">no</option><br>
</select>
jQuery.serialzie: publish = 1
, поэтому он дает мне первое и не правильное значение.
Есть идеи для обхода?
Решения
ХорошоКак уже упоминал RobW, лучшее решение, вероятно, состоит в том, чтобы просто позволить JavaScript выбрать желаемую опцию, установив selectElement.selectedIndex = 5
Однако мое решение немного отличается, потому что я не хочу менять плагиниспользуется для изменения внешнего вида моих выборов, из-за проблем с обслуживанием (например, необходимость менять скрипт каждый раз, когда они выпускают новую версию).Я просто использовал пользовательскую функцию для сериализации.
(function($) {
$.fn.serializer = function() {
var toReturn = [];
var elements = $(this).find(':input').get();
$.each(elements, function() {
if (this.name && !this.disabled && (this.checked || /select|textarea/i.test(this.nodeName) || /text|hidden|password/i.test(this.type)))
{
var val = $(this).val();
// if is select, check selected
if(this.nodeName == "SELECT")
{
val = $(this).find('option:selected').val();
}
toReturn.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( val ) );
}
});
return toReturn.join("&").replace(/%20/g, "+");
}
})(jQuery);