2013-07-05 2 views
0

У меня есть форма, которая отправляется через ajax в фоновый код, и я пишу функцию общего отключения в javascript, которую я могу использовать для установки onclick элемента. Введя это в браузер, игнорируйте любые синтаксические ошибки в следующем.Internet Explorer 7 onclick событие на кнопку отправки не срабатывает

function(elementID , processingText) { 
    var element = document.getElementById(elementID); 
    if (element) { 
     element.setAttribute("onClick", "alert('test')"); 
    } 
} 

В принципе элемент должен иметь событие onclick для установки предупреждения. Я могу подтвердить, что атрибут onclick настроен правильно, и он запускается в IE8 +, Chrome и Firefox. Он не срабатывает в IE7.

Элемент, который я тестирую, представляет собой кнопку отправки в форме (одна форма на странице). Он имеет много полей и одну кнопку отправки.

EDIT код рассылает с действием, так что не следует представить в любом случае, но не до тех пор, после того, как оповещение было признано /EDIT

Я тралил сеть в течение последних двух часов и следующих решений не работают или не являются опцией-

Добавить скрытое поле ввода для формирования. Wrap submit в теге и установите onclick в этом теге. Смена случая onclick to onClick

Любые решения, связанные с изменением html без использования javascript, не являются опцией, я пытаюсь создать общую функцию disableElement. Я могу настроить таргетинг на сценарий в IE7, чтобы он не работал во всех браузерах, а только в IE7.

Любая помощь будет принята с благодарностью

+0

Как использовать 'element.onclick = function() {alert ('test');};' вместо установки атрибута? – MaxArt

+0

Лучший ответ здесь - это просто отказаться от поддержки IE7 полностью - вряд ли кто-то все еще использует его. Теперь его пользовательская база упала ниже IE6. Я ценю, что это не может быть для вас вариантом, в зависимости от вашей ситуации, но если это ваше решение сделать, я бы рекомендовал его, потому что очень много хлопот поддерживать IE7, и вы получите практически нулевой выигрыш от Это. – Spudley

ответ

1

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

Проблемы, подобные этим в старых браузерах, являются, несомненно, причиной того, что библиотеки, подобные jQuery, существуют. jQuery делает много вещей, но одна вещь, которую он делает очень хорошо, - это устранить многие из этих неприятных причуд, возникающих при написании JavaScript-браузера.

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

Если вы используете JQuery, ваш код будет:

$(element).click(function() {alert('test');}); 

Прежде чем кто указывает на это, да, я знаю, что ОП не уточнил, JQuery в вопросе, и, возможно, не нужен ответ JQuery, но в этом случае я бы сказал, что это лучший ответ, потому что, если вы его не используете, вам придется написать большую часть того же кода совместимости, который уже есть в jQuery.

+0

Я пытался избежать использования JQuery, но, похоже, это лучший метод после всех – SMC

+0

jQuery - это не единственная библиотека, которую вы могли бы использовать, но если вы хотите поддерживать старые браузеры, такие как IE7, которые имеют плохую поддержку стандартов, вам нужно что-то вроде чтобы нормализовать некоторые проблемы совместимости. Как я уже сказал в другом месте, ваш единственный разумный вариант - отказаться от поддержки IE7; что освободит вас от большого процента неприятных приключений совместимости, подобных этому, и облегчит оправдание использования jquery. (у вас все еще есть проблемы с IE8, но их намного меньше, чем IE7) – Spudley

+0

Я бы с удовольствием, но потерять поддержку IE7, сейчас не вариант. еще раз спасибо – SMC

0

IE 7 делает метод поддержки SetAttribute но мне кажется, что это не возможно изменить OnClick атрибут с ним. Для получения дополнительной информации об этой проблеме проверить это: Why does an onclick property set with setAttribute fail to work in IE?

Приветствие

+1

IE7 *. * Поддержка 'setAttribute'. Однако он не может использоваться для регистрации прослушивателя событий. – MaxArt

+0

Вы правы! Я отредактировал свой ответ. Спасибо –

+0

Wellll почти. В IE7 'setAttribute' устанавливает атрибут' onclick' в порядке, но это именно так: он остается атрибутом и не анализируется и не регистрируется как прослушиватель событий. Что, семантически, на самом деле * хорошо *, потому что вы должны полагаться на другие методы для добавления прослушивателей событий. Подобно настройке свойства 'onclick' * * (или лучше использовать' attachEvent' в IE6-8). – MaxArt

Смежные вопросы