Атрибут create в js вызывает исключение "не функция"

Я использую js для изменения содержимого div, которое вводит содержимое. Я хочу использовать их с Ajax. Я использовал блокнот Firefox для отладки этой функции:

function show(id){
var div = document.getElementById('com');
div.innerHTML = '';
var input1 = document.createElement('input')
            .createAttribute('type').setAttribute('type', 'hidden')
            .createAttribute('value').setAttribute('value',id )
            .setAttribute('name','id' );
var input2 = document.createElement('input')
             .createAttribute('type').setAttribute('type', 'input')
             .createAttribute('name').setAttribute('name', 'com');
var btn = document.createElement('button')
          .createAttribute('onClick').setAttribute('onClick', 'post()');
btn.innerHTML = 'Comment';
div.appendChild(input1).appendChild(input2).appendChild(btn);
}

и что я получил это:

/*
Exception: document.createElement(...).createAttribute is not a function
@Scratchpad/2:2
*/

Я ничего не понял, есть идеи?

2 ответа

Решение

Я верю .createAttribute() принадлежит document, а не отдельным элементам, чтобы объяснить эту ошибку: .createElement() возвращает элемент, и этот элемент не имеет функции .createAttribute(),

Но вам не нужно использовать .createAttribute() перед звонком .setAttribute()потому что последний создаст атрибуты элемента, если они еще не существуют. Тем не менее, я думаю, .setAttribute() возвращается undefined так что вы не можете по-настоящему связать это. Попробуйте сделать это по одному шагу за раз:

var input1 = document.createElement('input');
input1.setAttribute('type', 'hidden');
input1.setAttribute('value',id );
input1.setAttribute('name','id' );
// etc.

По сути, исключение говорит о том, что нет функции с именем "createAttribute". И это правильно:

.createAttribute() является функцией document: https://developer.mozilla.org/en-US/docs/DOM/document

Таким образом, функции не могут быть связаны, как вы пытаетесь это сделать. Вы должны позвонить им индивидуально. И вообще, "createAttribute" больше не должен использоваться (см. " Использование createAttribute против простой установки атрибута напрямую?").

function show(id){
    var div = document.getElementById('com');
    div.innerHTML = '';

    var input1 = document.createElement('input');
    input1.setAttribute('type', 'hidden');
    input1.setAttribute('value',id );
    input1.setAttribute('name','id' );

    var input2 = document.createElement('input');
    input2.setAttribute('type', 'input');
    input2.setAttribute('name', 'com');

    var btn = document.createElement('button');
    btn.setAttribute('onClick', 'post()');
    btn.innerHTML = 'Comment';

    div.appendChild(input1).appendChild(input2).appendChild(btn);
}
Другие вопросы по тегам