IE7 jQuery .clone и .serialize - PullRequest
       4

IE7 jQuery .clone и .serialize

0 голосов
/ 08 ноября 2011

У меня странная ошибка, это мой код

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, пожалуйста, дайте мне знать

1 Ответ

1 голос
/ 08 ноября 2011

http://bugs.jquery.com/ticket/6486 показывает некоторую информацию об отчете об ошибке по теме.

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

document.getElementById('id').onclick = function() { 
  var broken = document.getElementById('id'); 
  if (broken.checked) broken.setAttribute('checked','checked'); 
  else broken.removeAttribute('checked'); 
};

Это может работать, так как в IE есть некоторые известные проблемы с inner- / outerHTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...