Не работает кнопка
Функция vvod_elementov(N) описывает кнопку 'Определить значение функции в узле'. При нажатии на эту кнопку вызывается функция Proverka() , которая выводит диалоговое окно с надписью "proverka".
Не работает кнопка, не могу понять в чем дело. Подскажите пожалуйста Вот код скрипта: function vvod_elementov(N) { var N=N.value; for (var i=0; i<N; i++) { document.write(" Введите х"); document.write(i); document.write("="); document.write("<input name=xi >" ); document.write(" <br>"); document.write(" <br>"); document.write("<input type=button value='Определить значение функции в узле' onClick='Proverka()' >" ); document.write(" <br>"); document.write("<br>"); } } function Proverka() { alert("proverka"); } |
Женя150, document.write полностью переписывает HTML-страницу, если та уже загружена...
document.write |
а как сделать, чтобы заработала?
|
Женя150, а что именно вы хотите сделать?
<html>
<head>
<script>
function vvod_elementov(N)
{
var N=N.value, div = document.getElementById("div");
div.innerHTML = "";
for (var i=0; i<N; i++)
{
div.innerHTML += " Введите х"+i+"=<input name=xi><br><br>";
div.innerHTML += "<input type=button value='Определить значение функции в узле' onClick='Proverka()'><br><br>";
}
}
</script>
</head>
<body>
<div id="div"></div>
<input type="text" id="el" value="2"><input type="button" value="Click" onClick="vvod_elementov(document.getElementById('el'))">
</body>
</html>
|
Вообще, я хочу, чтобы при нажатии на кнопку проводились вычисления и результат показывался на экране)
чтобы было f(x0)= f(x1)= f(x2)= и т.д xi-Math.sin(xi)-0.25 - это функция, значение которой нужно просчитать в каждом узле <html> <head> <script> function vvod_elementov(N) { var N=N.value, div = document.getElementById("div"); div.innerHTML = ""; for (var i=0; i<N; i++) { div.innerHTML += " Введите х"+i+"=<input name=xi><br><br>"; div.innerHTML += "<input type=button value='Определить значение функции в узле' onClick='Proverka()'><br><br>"; } } function Proverka() { for (var i=0; i<N; i++) { div.innerHTML += " f(х"+i+")="+xi-Math.sin(xi)-0.25; } } </script> </head> <body> <div id="div"></div> <input type="text" id="el" value="2"><input type="button" value="Click" onClick="vvod_elementov(document.getElementById('e l'))"> </body> </html> Поможете?) |
Женя150,
<html>
<head>
<script>
function vvod_elementov(N) {
var N = N.value, div = document.getElementById("el_len"), span, input, but, sub;
if (!parseInt(N, 10)) { return alert("Введенное значение не является числом!"); }
else { N = parseInt(N, 10); }
div.innerHTML = "";
for (i=0; i < N; i++) {
span = document.createElement("span");
input = document.createElement("input");
input.setAttribute("type", "text");
input.setAttribute("name", "x"+i);
but = document.createElement("input");
but.setAttribute("type", "button");
but.setAttribute("value", "Определить значение функции в узле");
but.onclick = (function(i) { return function() { Proverka(this.parentNode, i); } })(i);
sub = document.createElement("sub");
sub.appendChild(document.createTextNode(i));
span.appendChild(document.createTextNode("Введите x"));
span.appendChild(sub);
span.appendChild(input);
span.appendChild(document.createElement("br"));
span.appendChild(document.createElement("br"));
span.appendChild(but);
span.appendChild(document.createElement("br"));
span.appendChild(document.createElement("br"));
div.appendChild(span);
}
}
function Proverka(el, i) {
var div = document.getElementById("res"), sub;
if (!parseInt(el.children[1].value)) { return alert("Введенное значение не является числом!"); }
else { var sin = parseInt(el.children[1].value)-Math.sin(parseInt(el.children[1].value))-0.25;
/*
если нужно в градусах то пишем
var sin = (parseInt(el.children[1].value) * Math.PI / 180)-Math.sin(parseInt(el.children[1].value) * Math.PI / 180)-0.25;
*/
}
div.innerHTML = "";
sub = document.createElement("sub");
sub.innerHTML = i;
div.appendChild(document.createTextNode(" f(x"));
div.appendChild(sub);
div.appendChild(document.createTextNode(") = "));
div.appendChild(document.createTextNode(sin));
}
</script>
</head>
<body>
<input type="text" id="el" value="2"><input type="button" value="Click" onClick="vvod_elementov(document.getElementById('el'))">
<div id="el_len"></div>
<div id="res"></div>
</body>
</html>
|
круто!!!!!!!!!!!!!! спасибо огромное!!!!
а как зафиксировать на экране значение? ну чтобы не пропадало f(x0) при вычислении f(x1) ? |
Женя150, закоментируйте строку 42
//div.innerHTML = ""; |
Ура, работает как надо! Огромное спасибо!
|
Код работает, мне все нравится, только я хотела бы разъяснить некоторые моменты:
1) input = document.createElement("input"); - это создается класс input, в котором создается новый элемент input input.setAttribute("type", "text"); - в классе input вызывается метод, устанавливающий значение атрибута и значение text я правильно понимаю? 2) sub.appendChild(document.createTextNode(i)); - в класс sub добавляется новый элемент к детям существующего элемента существующий элемент это sub? А "дети" в данном примере это что? 3) document.createTextNode(i) - создается текст "i" в 44 строке : sub.innerHTML = i; - присваивает HTML i в чем разница? в том, что в createTextNode текста в принципе до этого не существовало и его создают в первый раз, а innerHTML присваивается уже существующий? 4) строка 18: в классе but вызывается метод Onclick, к которому привязана функция (i), которая возвращает функцию Proverka? не очень понятно про функцию (i) Proverka(this.parentNode, i) -что такое parentNode?
but.onclick = (function(i) { return function() { Proverka(this.parentNode, i); } })(i);
интересует вот это (i) в конце. Получается, что структура вызова выглядит так: onclick=(...)(i) ? 5) поясните пожалуйста строку 35. el.children[1]-то, что в квадратных скобках, это же ,буква "l"? и почему скобки квадратные? это массив? 6) почему-то при вводе в качестве значения узла "0" выдается сообщение, что "Введенное значение не является числом". Ноль-это все же число=) 7) при вводе узлов подписывается x0, x1 ... цифры записаны шрифтом поменьше как индексы. Очень удобно, мне интересно, в каком месте в коде прописан тот момент, что цифры должны быть другого размера? Разъясните пожалуйста:) |
Женя150,
1) createElement создает новый элемент с указанным тегом setAttribute создает атрибут (первый аргумент) и устанавливает ему значение (второй аргумент) 2) appendChild вставляет в документ DOM-узел для его отображения в данном случае к элементу sub добавляется новый текстовый узел (дитЁ) с указанным текстом 3) можно было использовать и innerHTML 4) 5) это цифра 1... children - массив дочерних узлов, т.е. в данном случае это второй дочерний узел 6) первый дочерний узел в данном случае это элемент sub, у которого нет свойства value, второй - это текстовое поле input 7) 19,20,22 sub |
| Часовой пояс GMT +3, время: 07:33. |