jQuery .attr ('type', 'submit') для элемента button, что приводит к странной ошибке в IE7 - PullRequest
6 голосов
/ 14 октября 2010

Я анализирую ответ JSON через $.ajax() и строю форму из значений этого объекта. Сценарий, который я написал, длинный, но вот что он делает:

  1. Динамически создаётся:
    ~ элемент формы,
    ~ элемент fieldset,
    элемент кнопки,
    ~ 20 или около того текстовых входов и элементов меток

  2. Присоединение входов и меток к набору полей

  3. Добавление кнопки к набору полей

  4. Добавление набора полей к форме

  5. Добавление формы к элементу в существующем DOM.

Все работает во всех браузерах, кроме одного небольшого фрагмента в IE. Я сузил его до следующего фрагмента кода. (doc - переменная, содержащая document)

fieldset.append(
    $(doc.createElement('button'))
        .addClass('ui-button')
        .attr('type', 'submit')
        .html('Re-Rate')
        .button()
);

Это шаг 3 сверху. Он создает элемент кнопки, добавляет класс, устанавливает для атрибута type значение submit, дает ему некоторый текст и затем добавляет его к набору полей. IE не работает с ошибкой «Объект не поддерживает это действие»

Если я закомментирую строку .attr() следующим образом:

fieldset.append(
    $(doc.createElement('button'))
        .addClass('ui-button')
        //.attr('type', 'submit')
        .html('Re-Rate')
        .button()
);

Все работает как положено.

Если вам интересно, .button() метод - это jQuery UI

Ответы [ 2 ]

10 голосов
/ 14 октября 2010

jQuery не позволяет изменять type элемента <input> или <button> .

Причиной этого является согласованность, и IE не позволяет вам изменять type после его вставки в DOM.

0 голосов
/ 14 октября 2010

jQuery не позволит вам изменить атрибут type в существующем элементе кнопки, потому что IE выдает ошибку, когда вы пытаетесь это сделать.

Однако вы можете попробовать что-то вроде этого (используя jQuery 1.4более краткий синтаксис создания элемента):

fieldset.append(
  $('<button>', {'type': 'submit', 'class': 'ui-button', 'html': 'Re-Rate'}).button()
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...