Подтвердить что ты не робот

Отправить отключенные поля

Я знаю, что определенное поведение для веб-форм заключается в том, чтобы не отправлять отключенные поля... но это не определение, которое я хочу. Я хочу использовать ajax для отправки формы, и я хочу, чтобы она получала все поля, даже если они отключены. Я не хочу создавать обходной путь, когда я делаю поле "отключенным"... или должен взломать его, когда я включаю поля → пост → отключить.

Можно ли сделать ajaxSubmit() или serialize() захватить отключенные поля, когда он перемещается по DOM и захватывает значения? или есть другой плагин для сериализации, который может это сделать? или у кого-то есть мода, которую я могу сделать для одного из этих плагинов, чтобы заставить его работать?

или я обречен его взломать?

4b9b3361

Ответ 1

Вы можете создавать свои поля readonly, это будет отменять изменения в значении ваших элементов управления.

Изменить:. Вы можете легко написать функцию "serializeDisabled", итерацию по отключенным элементам формы, которые имеют атрибут имени и используя jQuery.param в конце, чтобы генерировать сериализованную строку:

(function ($) {
  $.fn.serializeDisabled = function () {
    var obj = {};

    $(':disabled[name]', this).each(function () { 
        obj[this.name] = $(this).val(); 
    });
    return $.param(obj);
  }
})(jQuery);

Ответ 2

Почему бы просто не включить все запрещенные поля ввода непосредственно перед отправкой, используя .removeAttr() и .submit().

$('#my_form').submit(function(){
    $("#my_form :disabled").removeAttr('disabled');
});

Ответ 3

ОК... возможно, я не задал свой вопрос достаточно ясно... но ответ, который я искал, здесь:

http://docs.jquery.com/Plugins:Forms#.val.28.29_becomes_.fieldValue.28.29

Я упомянул ajaxSubmit() в моем вопросе, который исходит из плагина jQuery Form... и внутри этого плагина есть метод, называемый fieldValue(), который принимает параметр, называемый "успешным". Если вы передадите "true", тогда плагин вернет то, что W3C определяет как "удачные" элементы управления (что исключает отключенные элементы управления). но если вы установите его на false, то он получит все значения, независимо от определения W3C.

Я знал, что это возможно, так как все подчинение контролируется подключаемым модулем и не имеет ничего общего со стандартами/определением HTML... Я просто просил посмотреть, был ли этот параметр уже доступен в этом подключаемом модуле, в других плагинах. Он доступен в этом плагине, хотя поведение по умолчанию должно действовать как стандартный HTML submit

Ответ 4

Во-первых: Мне очень нравится ответ CMS. Гораздо проще. Но в случае, если это не лучший вариант...

Почему бы вам просто не использовать функцию JQuery, связанную с событием формы onsubmit, которое обходит форму и захватывает вход для всех <input> в форме и разрешает их, а затем отправляет форму? Вам нужно знать, отключен ли вход? Вы обеспокоены тем, что включение ввода приведет к изменению визуального внешнего вида таким образом, который касается пользователя?

В любом случае вы можете добавить что-то к элементам, которые вы активируете. Для стилизации добавьте класс, который дает отключенным входам тот же вид, что и разрешенные входы. Если вам нужно знать, какие из них были отключены, добавьте что-либо к имени или самому значению, чтобы указать статус.

Из любопытства, когда вы когда-нибудь захотите отключить информацию? Если вход всегда отключен (что означает, что пользователь не установил его таким образом), вы уже не знаете значение? И если вход отключен пользователем, разве вы не обманчиво собираете эти данные?

Если значение отключено, потому что это нечто вроде "общего" поля, которое обновляется через js на основе других неинфицированных полей, я бы пошел с CMS, сделав его только для чтения.


На основе вашего ответа на CMS:

Я могу только представить себе несколько сценариев, в которых окно выбора будет отключено, но вы хотите, чтобы он вернулся к script. Главное, что приходит мне в голову, это то, что определенные блоки выбора становятся доступными, когда проверяются другие параметры, но вы предпочитаете, чтобы форма возвращала значение по умолчанию в поле выбора, а не сервер script имел дело с заполнением пробелов.

Если это так, почему бы не настроить переключатель между скрытым входом и поле выбора? Изначальное значение и имя будут одинаковыми для обоих входов, но если один из них включен, другой отключен. Таким образом, script видит только один из двух входов, и поскольку у них одно и то же имя, он не попадает туда, откуда пришли данные.


$('form').submit(function() {
    $('[disabled]').each(function(i) {
        d_name = $(this).attr("name");
        d_val = $(this).val();
        $(this).after(
        '<input type="hidden" name="' + d_name + '" value="' + d_val + ' />'
        );
    });
return true;
});

На всякий случай, если вы считаете, что я слишком концептуальный, вот простая функция, которая будет запускаться на пользователе submit. Обратите внимание, как он проходит через каждый отключенный элемент и добавляет новый скрытый ввод в DOM с таким же именем и значением, что и ваш скрытый ввод, тем самым гарантируя, что ваша серверная сторона script может обрабатывать все входные данные в целом.

Ответ 5

//jQuery ('# container: input'). serializeAll()

(function($j) {
  $j.fn.serializeDisabled=function(){
    var obj={};
    $j(this).filter(':input:disabled').each(function(index,domElem){
      var $this=$j(domElem);
      obj[domElem.name]=$this.val(); 
    });
    return $j.param(obj);
  };

  $j.fn.serializeAll=function(){
    $this=$j(this);
    return $this.filter(':input:enabled').serialize()+'&'+$this.serializeDisabled();
  };
})(jQuery);

Ответ 6

Вы также можете просто повторно включить поля перед отправкой, используя следующее:

$('#form').submit(function() {
    $('[disabled]').each(function(i) {
        var d_name = $(this).attr("name");
        var d_val = $(this).val();
        $(this).attr("disabled", false);
    });
    return true;
});

$('#form').submit();

Ответ 7

Вы можете отключить входы и перед отправкой формы, которую вы можете повторно включить, поэтому форма будет включать их при отправке на серверную сторону