Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Функция которая работает на OnLoad не хочет работать на OnClick (https://javascript.ru/forum/dom-window/8387-funkciya-kotoraya-rabotaet-na-onload-ne-khochet-rabotat-na-onclick.html)

libinstyle 23.03.2010 01:11

Функция которая работает на OnLoad не хочет работать на OnClick
 
Здравствуйте! Помогите пожалуйста
Есть функция, которая создает элемент,
когда я вызываю ее так:
<body onload="createElement('div',
              {'class': 'myDivCSSClass', 'id': 'myDivId','align':'center', 'onClick': 'SendChange(this.id)'},
              {'width': '200px', 'height': '250px', 'background': '#3B9D00', 'color': '#fff'},
              'here is my text',
              'test',
              'before',
              1);">

то она работает нормально, элемент создается, и даже выполняется функция SendChange

При таком вызове:
<button onClick="createElement('div',
              {'class': 'myDivCSSClass', 'id': 'myDivId','align':'center', 'onClick': 'SendChange(this.id)'},
              {'width': '200px', 'height': '250px', 'background': '#3B9D00', 'color': '#fff'},
              'here is my text',
              'test',
              'before',
              1);">djdjdjjd</button>

ноль эмоций вообще!

Как это понимать? Может кто то сталкивался, плиз Хелп!!
Если это имеет значение, то проверяется все на Гугл Хроме

Octane 23.03.2010 01:19

Код функции createElement покажите.

libinstyle 23.03.2010 01:20

Вот он
function createElement(name, attrs, style, text,past_id,position,changed) {
    var parent = document.getElementsByTagName('BODY')[0];
    var e = document.createElement(name);
    if (attrs) {
        for (key in attrs) {
            if (key == 'class') {
                e.className = attrs[key];
            } else if (key == 'id') {
                e.id = attrs[key];
            } else {
                e.setAttribute(key, attrs[key]);
            }
        }
    }
    if (style) {
        for (key in style) {
            e.style[key] = style[key];
        }
    }
    if (text) {
        e.appendChild(document.createTextNode(text));
    }
    parent.appendChild(e);
    if(past_id){
          var old_elem = document.getElementById(past_id);
        if(position=='before'){            
            parent.insertBefore(e,old_elem)
        }else if(position=='after'){
            insertAfter(parent,e,old_elem);
        }
        if(changed!='' && changed==true){
            parent.removeChild(old_elem);
        }
    }
}

Octane 23.03.2010 01:34

Придется переименовать функцию.

<button onclick="alert(createElement)">Test</button>

Результат:
function createElement() {
    [native code]
}
Там срабатывает with и createElement находится раньше, в document, а не window, поэтому вызывается совсем не та функция.

Octane 23.03.2010 01:40

Вот тут объясняли, почему так: http://javascript.ru/forum/misc/5329...lik-imjon.html

libinstyle 23.03.2010 01:41

Ок! Спасибо, все получилось! CreateElem() значит будит:)

Octane 23.03.2010 01:42

Хотя можно window.createElement, но лучше переименовать, чтобы не было путаницы.


Часовой пояс GMT +3, время: 16:48.