как скопировать другие элементы на функцию клика - PullRequest
2 голосов
/ 07 марта 2011

Я смог успешно получить другую функцию onclick для элементов, выполнив это:

document.getElementById(this.options[this.selectedIndex].text).getAttribute('onclick')

это дает мне точный текст, который я хочу вставить в другое событие onchange элементов, поэтому я подумал, что смогусделать это:

<select onchange="document.getElementById(this.options[this.selectedIndex].text).getAttribute('onclick')">

Это не работает, хотя.У кого-нибудь есть идеи, я в тупике!Большое спасибо заранее!

Ответы [ 3 ]

3 голосов
/ 07 марта 2011

Вы не можете просто вывести функцию в такой атрибут. Я рекомендую вам начать писать ненавязчивый JavaScript .

HTML

<select id="mySelect">
    <!-- snip -->
</select>

JavaScript

var select = document.getElementById('mySelect');
select.onchange = function () {
    var id = this.options[this.selectedIndex].text,
        clickHandler = document.getElementById(id).onclick;
    clickHandler.apply(this);
};

Демо & # x2192;


Редактировать re: комментарий ОП

«Есть ли простой способ применить это ко всем выборам на странице?»

Конечно, есть! Но вы должны быть осторожны, чтобы не создавать функции в цикле (это не сработает).

var selects = document.getElementsByTagName('select'),
    numSelects = selects.length,
    i;

function setClickHandler(element) {
    element.onchange = function () {
        var id = this.options[this.selectedIndex].text,
            clickHandler = document.getElementById(id).onclick;
        clickHandler.apply(this);
    }
}

for (i=0; i<numSelects; i++) {
    setClickHandler(selects[i]);
}
0 голосов
/ 07 марта 2011

Это не рекомендуется, но самое простое исправление, которое будет работать,

<select onchange="function() {document.getElementById(this.options[this.selectedIndex].text).getAttribute('onclick')();}">
0 голосов
/ 07 марта 2011

Я не проверял это, но возможно:

var handler = document.getElementById(this.options[this.selectedIndex].text).getAttribute('onclick');

var selectEl = document.getElementsByTagName('select')[indexOfSelect];

selectEl.setAttribute('onClick',handler);

Следующие работы (более или менее такие же, как указано выше, за исключением использования атрибута onFocus в элементе select):

var handler = document.getElementById('first').getAttribute('onclick');
var selectEl = document.getElementsByTagName('select')[0];
selectEl.setAttribute('onfocus',handler);

JS Fiddle demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...