Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   проблема с appendChild (https://javascript.ru/forum/misc/44739-problema-s-appendchild.html)

Sivik 31.01.2014 04:32

проблема с appendChild
 
столкнулся с такой проблемой:

на любую строку, кроме
document.body.appendChild()

ругается ошибкой
Object #<NodeList> has no method 'appendChild'

всё работает, но лишь под body

в чём может быть проблема?

danik.js 31.01.2014 07:06

Цитата:

Сообщение от Sivik
на любую строку

Примеры в студию!
Цитата:

Сообщение от Sivik
в чём может быть проблема?

Ответ:
Цитата:

Сообщение от Sivik
Object #<NodeList> has no method 'appendChild'

(гугл транслейт в помощь если не андерстенд!)

Sivik 31.01.2014 19:02

андерстенд-то андерстенд), только нифига не работало)
впрочем, я уже разобрался. но теперь другая загвоздка у меня:
не получается прописать в созданном селекте событие onchange.

вот пример:

var slct = document.createElement('SELECT');
slct.name = 'fish';
slct.onchange = 'setFishes(this)';


так ли прописывается это событие?

ksa 31.01.2014 19:13

Цитата:

Сообщение от Sivik
так ли прописывается это событие?

Нет. :no:
Событием должна быть функция, а не строка...

Sivik 31.01.2014 19:22

есть ли примеры? скиньте ссылку, пожалуйста. если не затруднит.

ksa 31.01.2014 19:29

Цитата:

Сообщение от Sivik
есть ли примеры?

Все тут на сайте. :yes:
http://javascript.ru/tutorial/events...voystvo-obekta

Sivik 31.01.2014 20:14

погоди, ты правильно всё понял?

у меня уже есть готовая функция, которая выполняется
<select name="fish" onchange="setFishes(this)">


задача состоит в том, чтобы чтобы кликом создать точно такой же селект, с точно такими же атрибутами. нейм появляется, ончейндж нет.

ksa 31.01.2014 22:44

Цитата:

Сообщение от Sivik
ты правильно всё понял?

А как еще можно понять это?
Цитата:

Сообщение от Sivik
slct.onchange =

Только как

slct.onchange = function (){
   // тут нужные действия...
};

ksa 31.01.2014 22:45

Вот еще на эту тему...
http://javascript.ru/tutorial/events/crossbrowser

ruslan_mart 01.02.2014 05:12

Если именно строкой, то:
slct.setAttribute('onchange', 'setFishes(this)');

Sivik 01.02.2014 18:16

Цитата:

Сообщение от Ruslan_xDD (Сообщение 295159)
Если именно строкой, то:
slct.setAttribute('onchange', 'setFishes(this)');

вот это более точно. короче, полная картина:

есть форма, в которой есть 2 селекта:

<div id="fich">
    <select name="fish" onchange="setFishes(this)">
        <option value="" selected>Первый список:</option>
        <option value="first">один</option>
        <option value="second">два</option>
    </select> 
    <select name="color">
        <option value="" selected>Второй список:</option>
    </select>
</div>


к первому есть функция

function setFishes(chooser){
	var newElem;
	var wtf = ( navigator.appName == "Microsoft Internet Explorer" ) ? -1 : null;
	var fishChooser = chooser.form.elements["color"];
	while (fishChooser.options.length){
		fishChooser.remove(0);
	}
	var choice = chooser.options[chooser.selectedIndex].value;
	var ki = fishki[choice];
	newElem = document.createElement("option");
	newElem.text = "Второй список:";
	newElem.value = "";
	fishChooser.add(newElem, wtf);
	if ( choice != "" ){
		for (var i=0;i<ki.length;i++){
			newElem = document.createElement("option");
			newElem.text = ki[i].text;
			newElem.value = ki[i].value;
			fishChooser.add(newElem, wtf);
		}
	}
}
var fishki = new Object();
fishki["first"] = [
	{ value:"three", text:"три" },
	{ value:"four", text:"четыре" },
	{ value:"five", text:"пять" },
	{ value:"six", text:"шесть" }
];
fishki["second"] = [
	{ value:"seven", text:"семь" },
	{ value:"eight", text:"восемь" },
	{ value:"nine", text:"девять" },
	{ value:"ten", text:"десять" }
];


клонировать получилось всё. но теперь вот такая ошибка:
Cannot read property 'length' of undefined.


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