Я знаю, что немного опаздываю, но это меня тоже бесило, и я наконец-то понял.
Чтобы IE выполнял динамически созданный код во время события onclick, сделайте следующее:
- Напишите код для всех других браузеров: element.setAttribute ("onclick", object.varName + "method (" + var + ")");
- Используйте пользовательский атрибут для хранения вашего динамического оператора: element.setAttribute ("exec", object.varName + "method (" + var + ")");
- Создайте анонимную функцию для выполнения оператора, хранящегося в нашем настраиваемом атрибуте, при нажатии на элемент: element.onclick = function () {eval (this.exec); };
Этот подход работает для меня в IE9, работающем в режиме браузера IE7, а также в текущих версиях Chrome и Firefox.
Несколько замечаний:
Во-первых, в моем случае мне нужно было выполнить метод объектов. Для этого мне нужно знать имя переменной для объекта, которое я устанавливаю как свойство при инициализации класса. Поэтому свойство object.varName - это то, что я создал и установил в своем коде времени выполнения.
Во-вторых, exec не является стандартным атрибутом, поэтому он работает для хранения строки, которую я хочу выполнить. Но вы можете называть это как хотите, если используете нестандартный атрибут.
В-третьих, вот почему это работает: IE, или, по крайней мере, IE7, позволит вам только установить событие onclick, содержащее анонимную функцию. Если вы назначаете метод объекта или переменную, содержащую
функция, функция выполняется, когда установлен атрибут onclick, а не когда элемент фактически нажат. В моем случае я не смог создать анонимную функцию, потому что переменные меняются во время выполнения. Поэтому вместо этого я динамически создаю инструкцию, которая затем сохраняется в атрибуте элемента. Затем событие onclick выполняет любой оператор, сохраненный в этом атрибуте.
Приветствие.