onclick setAttribute обходной путь для IE7 - PullRequest
0 голосов
/ 14 июня 2011

Я не могу получить это:

top.document.getElementById("clickThis").setAttribute("onclick", "tinyMCE.execCommand('mceInsertContent',false,'<div style=\"width: 600px; margin: 0 auto .5em;\" class=\"wp-caption alignnone\"><a href=\"<?php echo $full_image_path; ?>\" rel=\"lightbox\" title=\"View in lightbox\"><img class=\"alignnone\" src=\"<?php echo $full_width; ?>\" alt=\"<?php echo $value; ?>\" /></a><p class=\"wp-caption-text\"><?php echo $get_image->caption; ?></p></div>');");

Для работы в IE7 я перепробовал все обходные пути, которые мог найти в Интернете, и хотел бы знать, может ли кто-нибудь помочь?

Ответы [ 3 ]

2 голосов
/ 14 июня 2011

Не делай этого.

Вместо этого добавьте обработчик событий , вызвав attachEvent / addEventListener.

1 голос
/ 05 августа 2011

Я знаю, что немного опаздываю, но это меня тоже бесило, и я наконец-то понял.

Чтобы IE выполнял динамически созданный код во время события onclick, сделайте следующее:

  1. Напишите код для всех других браузеров: element.setAttribute ("onclick", object.varName + "method (" + var + ")");
  2. Используйте пользовательский атрибут для хранения вашего динамического оператора: element.setAttribute ("exec", object.varName + "method (" + var + ")");
  3. Создайте анонимную функцию для выполнения оператора, хранящегося в нашем настраиваемом атрибуте, при нажатии на элемент: element.onclick = function () {eval (this.exec); };

Этот подход работает для меня в IE9, работающем в режиме браузера IE7, а также в текущих версиях Chrome и Firefox.

Несколько замечаний:

Во-первых, в моем случае мне нужно было выполнить метод объектов. Для этого мне нужно знать имя переменной для объекта, которое я устанавливаю как свойство при инициализации класса. Поэтому свойство object.varName - это то, что я создал и установил в своем коде времени выполнения.

Во-вторых, exec не является стандартным атрибутом, поэтому он работает для хранения строки, которую я хочу выполнить. Но вы можете называть это как хотите, если используете нестандартный атрибут.

В-третьих, вот почему это работает: IE, или, по крайней мере, IE7, позволит вам только установить событие onclick, содержащее анонимную функцию. Если вы назначаете метод объекта или переменную, содержащую функция, функция выполняется, когда установлен атрибут onclick, а не когда элемент фактически нажат. В моем случае я не смог создать анонимную функцию, потому что переменные меняются во время выполнения. Поэтому вместо этого я динамически создаю инструкцию, которая затем сохраняется в атрибуте элемента. Затем событие onclick выполняет любой оператор, сохраненный в этом атрибуте.

Приветствие.

0 голосов
/ 12 января 2012

работал как сон, когда я сделал это:

if(navigator.userAgent.indexOf("MSIE 7.0") != -1){

    document.getElementById("pb").onclick = function(){ eval( this.onClick ); };
}

таким образом только ie7 смотрит на это.

...