Я знаю, есть несколько постов с почти одинаковым вопросом, но все упомянутые "исправления" не работают для меня.
но сначала вот что мне нужно:
Некоторые формы в моем приложении должны быть включены путем активации режима редактирования. Если режим редактирования активен, каждая кнопка (кроме «Сохранить и прервать») и ссылка на странице не должны делать то, что обычно делает, а должны сообщать, что вместо этого вам нужно выйти из режима редактирования.
Мой скрипт:
Кнопка для запуска режима редактирования вызывает это:
function startEditMode(selector) {
var disableAction = "return false;";
jQuery("mySelectors").each(function(){
jQuery(this).bind('click', editModeOnClickHandler);
var onClickValue = "";
var onClick = jQuery(this).attr("onClick");
if ( onClick !== undefined ) onClickValue = "" + onClick;
jQuery(this).attr("onClick", disableAction + onClickValue);
});
}
Чтобы остановить режим редактирования, существует метод, который обращает все это в обратную сторону.
Используемый обработчик "editModeOnClickHandler" просто показывает сообщение и возвращает false; и не важно для моего вопроса.
Итак ... все отлично работает в FF и IE8 (также в Chrome), но не в IE7. OnClick просто не изменяется в IE7 через .attr, как я читал в других публикациях.
решение, которое размещено везде:
Используйте привязку событий вместо манипулирования атрибутами. Я хотел бы использовать это!
Вот причина, почему я не могу:
Я попытался отменить привязку всех обработчиков и привязать свой собственный обработчик, как вы видите в коде выше. Но это не мешает вызову встроенного onclick.
Хорошо, вы можете подумать, не используйте встроенные вызовы ... но мой проект написан на JSF с использованием Primefaces, и большая часть его кода генерируется динамически. В общем, у меня нет возможности предотвратить встроенные клики.
Теперь я застрял.
Я должен обрабатывать встроенные onclicks, которые можно предотвратить только путем вставки «return false;» впереди, но это кажется невозможным с IE7.
Кто-нибудь знает обходной путь IE7, чтобы иметь возможность манипулировать атрибутами onclick? И снова: я не могу использовать .bind ('click' ... или .click (потому что они не могут остановить исходный встроенный onclick.
Спасибо за все ответы!
Alex
редактировать
с вашей помощью я выяснил, что в IE7 изменение встроенного onclick возможно при this.onclick = ..
. Правильная обработка этого ответа уже была дана в ответе на этот вопрос: Как динамически изменить обработчик onClick?
Для моей конкретной проблемы здесь я не нашел правильного решения, потому что я не мог манипулировать исходными встроенными значениями onclick без их уничтожения. По этой причине я изменил свой сценарий, поэтому IE7 отключает все кнопки и ссылки, чтобы они больше не нажимались. Конечно, чтобы не включать слишком много, я тоже добавлю имя класса.
отключение всех еще не отключенных (это вызывается в цикле):
if (!jQuery(this).attr('disabled')) {
jQuery(this).attr('disabled', 'disabled');
jQuery(this).addClass('editmodedisabled');
}
включить мои предыдущие отключенные вещи:
if (jQuery(this).hasClass('editmodedisabled')) {
jQuery(this).attr('disabled', '');
jQuery(this).removeClass('editmodedisabled');
}
может быть, это кому-нибудь еще поможет