У меня есть странная ошибка, это мой кодIE7 JQuery .clone и .serialize
var form = $("form").clone();
hiddenNodes.clone().appendTo(form);
parameters = form.serialize();
У меня есть несколько флажков в этой форме и некоторые другие материалы, Если флажок не установлен, и проверить его, строка параметров будет содержать правильное значение для этого флажка. Однако, если я хочу снять флажок, строка параметров всегда будет истинна (значение, которое флажок первоначально был от ответа) ... Он работает в Firefox ...
Редактировать: Rhe ниже не имеет отношения к делу, но я сохраните его для истории
Я использую MVC3 и MVC3, который отображает два входа для флажков, один флажок и один скрытый, потому что, когда вы отправляете форму, она отправляет только отмеченные поля. В скрытом поле всегда есть значение false, поэтому при установке флажка вы получите два входа с одинаковым именем (первое со значением true, а другое со значением false), но только для связывания с MVC-моделью. Если флажок снят, он отправит скрытое поле со значением false, и связующее будет привязываться к нему.
Но это когда вы делаете полные представления, im делая сообщение ajax, чтобы получить данные формы, я делаю jquery сериализованную форму, в сериализации Firefox принимает первое вхождение каждого входа, и именно поэтому он работает в firefox. IE7 включает в себя оба, и поскольку значение для флажка истинно, модельбиндер будет привязываться к этому. Есть ли какое-нибудь чистое решение вокруг этого? я мог бы удалить все непроверенные галочки перед тем serializaing, что лучший способ
edit2: Читайте здесь
form.clone() в IE7 всегда будет возвращать HTML, как это выглядело, когда он пришел из сервер, поэтому, если флажок установлен с сервера, он будет проверяться, когда вы будете делать form.clone(). Мне нужно, чтобы клонировать его, потому что я использую Ajax и не могу уничтожить разметку ...
Edit3: Это становится безумнее edit2 только справедливо, когда флажок с сервера, в этом случае клон всегда будет проверено, не имеет значения, если вы сняли флажки ... Но если флажок снят с сервера, и вы его проверите, вы получите флажок в клонированной форме.
редактировать: Это устраняет проблему
После cloneNode мне нужно, чтобы эти линии, чтобы добавить старый innerHtml к узлу
если (jQuery.browser.msie & & (jQuery.browser.version < = 7)) clone.innerHTML = elem.innerHTML;
Проблема в том, что изменение в API ядра jQuery никогда не является хорошим решением, это известное исправление, поэтому по какой-то причине команда jQuery не хочет исправлять ее. Я попытался переопределить метод cloneNode в элементе и добавить туда код, работал в FF, но не в IE, я также попытался переопределить метод clone в jQuery, в котором эта часть работала, но основной код клонирования использует методы, которые я не могу найти способ доступа вне JQuery ....
Если кто-нибудь есть хороший способ добавления выше строк кода JQuery без изменения в фактической апи, пожалуйста, дайте мне знать
Вы можете разместить html-код, я думаю, вы, возможно, допустили ошибку. – Val
Вы проверили в IE dev инструменты, что происходит? Я обнаружил, что более старые версии IE очень сильно придираются при вставке созданных jQuery элементов в DOM, поскольку они считают, что они «недействительны». – m90
См. Edit – Anders