У меня странная ошибка, это мой код
var form = $("form").clone();
hiddenNodes.clone().appendTo(form);
parameters = form.serialize();
У меня есть несколько флажков в этой форме и некоторые другие входные данные. Если флажок не установлен и я его проверяю, строка параметров будет содержатьправильное значение для этого флажка.Однако, если я хочу снять флажок, строка параметров всегда будет истинной (значение, которое изначально имел флажок от ответа) ... Это работает в Firefox ...
edit: Rhe нижене актуально, но я сохраняю это для истории
Я использую MVC3 и MVC3 отображает два входа для флажков, один флажок и один скрытый, потому что когда вы отправляете форму, она отправляет только отмеченные флажки.Скрытое поле всегда имеет значение false, поэтому при установке флажка вы получите два входа с одинаковым именем (первый со значением true, а другой со значением false), но связыватель модели MVC принимает только первый.Когда этот флажок снят, он будет отправлять только скрытое поле со значением false, и связыватель будет привязываться к нему.
Но это когда вы выполняете полную отправку, я делаю сообщение ajax, чтобы получить данные формыя делаю форму сериализации jquery, в Firefox сериализация принимает первое вхождение каждого входа и поэтому работает в Firefox.IE7 включает и то, и другое, и поскольку значение для флажка истинно, связыватель моделей будет с этим связываться. Есть ли какое-то чистое решение в этом отношении?Я мог бы снять все непроверенные флажки перед сериализацией, это лучший способ
edit2: читать отсюда
form.clone () в IE7 всегда будет возвращать HTML какон смотрел, когда он пришел с сервера, поэтому, если флажок был установлен с сервера, он будет проверен при выполнении form.clone ().Мне нужно клонировать его, потому что я использую ajax и не могу уничтожить разметку ...
edit3: это становится безумным edit2 имеет значение true, только когда флажок установлен с сервера, в данном случаеклон всегда будет проверяться, не имеет значения, если вы сняли флажок ... Но если флажок снят с сервера и вы отметили его, вы получите флажок в клонированной форме.
edit: Thisрешает проблему
После cloneNode мне нужно иметь эти строки для добавления старого innerHtml к узлу
if (jQuery.browser.msie && (jQuery.browser.version <= 7))clone.innerHTML = elem.innerHTML; </p>
Проблема в том, что изменение в базовом API jQuery никогда не является хорошим решением, это известное исправление, поэтому по какой-то причине команда jQuery не хочет его исправлять.Я попытался переопределить метод cloneNode в Element и добавить туда код, работал в FF, но не в IE, я также пытался переопределить метод clone в jQuery, чтобы эта часть работала, но в базовом коде клона используются методы, которые я не могу найтиспособ получить доступ за пределами jQuery ....
Если у кого-то есть хороший способ добавить вышеуказанные строки кода в jQuery без изменения в реальном API, пожалуйста, дайте мне знать