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

Безотносительно "туалет-l" возвраты является моим числом.

32
задан Lightness Races with Monica 7 November 2011 в 17:14
поделиться

4 ответа

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

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

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

    $(':disabled[name]', this).each(function () { 
        obj[this.name] = $(this).val(); 
    });
    return $.param(obj);
  }
})(jQuery);
37
ответ дан 27 November 2019 в 20:27
поделиться

OK... perhaps I didn't ask my question clearly enough... but the answer I was looking for is here:

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

I mentioned ajaxSubmit() in my question, which comes from the jQuery Form plugin... and inside that plug-in there is a method called fieldValue() which accepts a parameter called "successful". If you pass in "true" then the plug-in only returns what the W3C defines as "successful" controls (which excludes disabled controls). but if you set it to false, then it will get all values, regardless of W3C definition.

I knew this was possible, since the entire submission is controlled by the plug-in and has nothing to do with the HTML standards/definition... I was just asking to see if this option was already available in this plug-in or other plugins. It is available in this plugin, although the default behavior is to act like a standard HTML submit

5
ответ дан 27 November 2019 в 20:27
поделиться

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

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

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

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

Если значение отключено, потому что это что-то вроде поля «total», которое обновляется через js на основе других не- отключенных полей, я бы предпочел CMS сделать его доступным только для чтения.


Основываясь на вашем ответе на CMS:

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

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


$('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;
});

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

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


$('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;
});

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

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


$('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;
});

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

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


$('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;
});

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

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


$('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;
});

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

2
ответ дан 27 November 2019 в 20:27
поделиться

//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);
3
ответ дан 27 November 2019 в 20:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: