Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Формы [2]
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (3): « 1 [2] 3 » 

> Без описания
Systemnik Администратор
Отправлено: 27 Марта, 2008 - 01:47:04
Post Id



ExBB Developer Team


Покинул форум
Сообщений всего: 778
Дата рег-ции: Дек. 2007  

Карма 0




Цитата:
Извини, я ошибся; значит, это у selectа value обрабатывается корректно.

Скорее ты не ошибся.. так как у радио все обрабатывается корректно только в php....
видимо ты нечайно перепутал понятия этих языков.. Подмигивание

Так насчет скрипта который ты предложил..
Проше нельзя?? Растерялся
так .. начинаем разбиратся вот как я понял код функции(если неправ - поправь)
CODE:
function getRadioValue(radio)
{
for (var i=0; i<radio.length; i++)
if (radio[i].checked)
return radio[i].value;
return null;
}

Значит она получает параметр в данном случае имя радио переключателя(место расположения)
потом начинает узнавать сколько таких переключаталей всего..
потом она внутри цикла начинает искать тот переключатель который включен..
и ксли находит возвратит его имя если не находит возвратит null
я вроде понял все.. но немогу поняь одного.. почему написано не так:

CODE:
function getRadioValue(radio)
{
for (var i=0; i<radio.length; i++) {
if (radio[i].checked) {
return radio[i].value;
} else {
return null;
}
}


CODE:
length

Он что номера радио кнопок с одним именем в массив кидает?? Или уву откуда массив взялся?

Теперь вопрос нестолько по формам сколько по php (но не офффтоп!!)

Вот у меня есть код(PHP):

CODE:
<?php
/*
Script writed by Systemnik for
teachering me
*/
if($_GET['element'] == "1") {
print("You select is 1 checkbox");
}

if($_GET['element'] == "1" && $_GET['element'] == "2") {
print("You select 2 checkboxes");
}

if($_GET['element'] == "2") {
print("You selct is 2 checkbox");
}

?>

<html>
<head>
<title>
Teachering script
</title>
</head>
<body>
<form>
<input type=checkbox name="element" value="1">
<input type=checkbox name="element" value="2">
<input type=submit value="Submit">
</form>
</body>
</html>


Что я от него хочу??

1 ) Если выбран первый чекбок он пишет
You select is 1 checkbox
2) Если выбран второй чекбокс он пишет
You selct is 2 checkbox
3) Если выбрано два чекбокса должен написать
You select 2 checkboxes
к большому сожалению первое второе работает а третье нет(( Почему??

(Отредактировано автором: 27 Марта, 2008 - 02:06:25)

 
 Top
Systemnik Администратор
Отправлено: 27 Марта, 2008 - 03:09:29
Post Id



ExBB Developer Team


Покинул форум
Сообщений всего: 778
Дата рег-ции: Дек. 2007  

Карма 0




Слух во напиал простейщий скрип для проверки работы твоей функции.. не работает Огорчение

CODE:
<html>
<head>
<title>
Запуск функции с параметрами
</title>
</head>
<body>
<script>
function getRadioValue(radio)
{
for (var i=0; i<radio.length; i++) {
if (radio[i].checked) {
return radio[i].value;
} else {
return null;
}
}
}

peremennaya = getRadioValue(document.testingform.radio1);

function test(parametr) {
if(parametr == "1") {
alert("Выбрана радиокнопка 1");
}
if(parametr == "2") {
alert("Выбрана радиокнопка 2");
}
}
</script>
<form name="testingform">
<input type="radio" name="radio1" value="1">
<input type="radio" name="radio1" value="2">
<input type=submit onClick="test(peremennaya);" value="Запуск функции">
</form>
</body>
</html>
 
 Top
Furax
Отправлено: 27 Марта, 2008 - 03:28:08
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Systemnik пишет:
Скорее ты не ошибся.. так как у радио все обрабатывается корректно только в php....
видимо ты нечайно перепутал понятия этих языков..
Нет, как раз в JS перепутал radio и select.

Systemnik пишет:
Проше нельзя??
Короче можно, проще - вряд ли. Надо пройтись по всем радиобатонам и узнать, какой из них взведён (или узнать, что никакой не взведён).

Systemnik пишет:
Значит она получает параметр в данном случае имя радио переключателя(место расположения)
Уясни разницу между именем и указателем! Имя - это строка ("el1"Подмигивание. Указатель - это то, что возвращает JavaScript, пройдя по указанному тебе пути в дереве объектов. Сделай alert() того и другого, сравни. Функция получает указатель на коллекцию. Если ей передать вместо указателя на эту коллекцию её имя, функция выдаст ошибку, попытавшись обратиться к элементам массива (а вместо массива - строка).

Systemnik пишет:
почему написано не так: <код>
Очень просто! Представь, что первая радиокнопка не взведена. Тогда сработает else и твоя функция сразу вернёт null, не проверяя остальные. В моём варианте return false выполняется только после завершения цикла, т. е. когда доподлинно известно, что ни один батон не взведён.

Systemnik пишет:
Он что номера радио кнопок с одним именем в массив кидает?? Или уву откуда массив взялся?
Он не номера в массив кидает. Он ссылки кидает, а номера от 0 до length-1 - это ключи массива. Массив HTML-элементов, предоставляемый браузером, называется коллекцией (отличия от массива минимальны). Этот массив и возвращается JavaScriptом по ссылке document.form1.el1, этот массив и передаётся в функцию.

По поводу твоего PHP-кода. Начнём с того, что страница написана абсолютно неправильно. (Скорми-ка этот код валидатору - validator.w3.org!) Где аттрибуты action и method у формы? Где тип (doctype)? Конкретно твою проблему вызывает то, что у тебя 2 чекбокса имеют одинаковые имена. Это не является допустимым в HTML. Кроме того, эта строка содержит глупость:
CODE:
if($_GET['element'] == "1" && $_GET['element'] == "2")
В ней проверяется значение переменной $_GET['element']. Как одна переменная может иметь сразу 2 значения? Чекбоксы должны иметь разные имена!

Кстати, включи error_reporting и посмотри на те варнинги, которые тебе выдаст PHP. Нормальный скрипт не выдаёт варнингов. Никогда. Либо подави сообщения об ошибках (символом @), либо проверяй сначала существование соответствующих GET-переменных (функцией isSet), и только после этого - их значение.
 
 Top
Furax
Отправлено: 27 Марта, 2008 - 03:29:50
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Systemnik пишет:
напиал простейщий скрип для проверки работы твоей функции
Где ты в моей функции видел else?
 
 Top
Furax
Отправлено: 27 Марта, 2008 - 03:36:06
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Конкретно та ошибка, из-за которой не работает, состоит в том, что ты в 20 строке используешь ссылку document.testingform.radio1, которая получает смысл только в строках 31-35: браузер выполняет код последовательно, и при выполнении 20 строки формы, а уж тем более - принадлежащего ей радиобатона, ещё нет.
 
 Top
Systemnik Администратор
Отправлено: 27 Марта, 2008 - 05:46:41
Post Id



ExBB Developer Team


Покинул форум
Сообщений всего: 778
Дата рег-ции: Дек. 2007  

Карма 0




Указатель - document.form.element ??
Имя - element ??
length возвращает колличество эллементов с именем element?? А массив
это вот document.form.element ??
Растерялся Растерялся Растерялся


А теперь все исправил.. ошибок нет.. я вот хотел что бы функция
test(); запускалась с параметрами полученными из ормы порядок вроде правильный. почему не работает??
CODE:

<html>
<head>
<title>
Запуск функции с параметрами
</title>
</head>
<body>
<form name="testingform" onSubmit="start();">
<input type="radio" name="radio1" value="1">
<input type="radio" name="radio1" value="2">
<input type=submit value="Запуск функции">
<script>
function getRadioValue(radio)
{
for (var i=0; i<radio.length; i++) {
if (radio[i].checked) {
return radio[i].value;
}
return null;
}
}

peremennaya = getRadioValue(document.testingform.radio1);

function test(parametr) {
if(parametr == "1") {
alert("Выбрана радиокнопка 1");
}
if(parametr == "2") {
alert("Выбрана радиокнопка 2");
}
}

function start() {
test(peremennaya);
}
</script>
</form>
</body>
</html>


<!-- А МОЖНО Я СДЕЛАЮ НЕ return null; а return false; ведь так стандартнее будет..
-->

(Отредактировано автором: 27 Марта, 2008 - 06:14:13)

 
 Top
Furax
Отправлено: 27 Марта, 2008 - 07:20:18
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Systemnik пишет:
Указатель - document.form.element ??
Имя - element ??
length возвращает колличество эллементов с именем element?? А массив это вот document.form.element ??
Да. JavaScript - язык с нотацией выражений. Выражение 2*2 возвращает 4, выражение 'document' - строку со словом document, выражение document - указатель на объект документа (хотя в JS можно сказать, что ссылку, или что сам объект - здесь эти типы не различаются). Выражение document.form или document['form'] возвращает ссылку на объект формы, выражение document.form.element (или document['form']['element'], или document.form['element'], или document['form'].element) - ссылку на элемент формы.

В случае с радиобатонами, когда одному имени соответствует не один объект, а несколько, возвращается массив этих самых объектов. Хотя у каждого из них может быть свой id, и document.getElementById() будет возвращать ссылку на конкретный объект радиобатона.

В JavaScript стандартнее return null. Или даже return undefined. В PHP - другое дело.

Почему не работает? Во-первых, ещё раз говорю, return null должен стоять после цикла, а не в цикле; у Тебя он выполняется при первой же итерации, если галочка в первом батоне не стоит. Если непременно хочется написать с фигурными скобками, пиши так:
CODE:
function getRadioValue(radio)
{
for (var i=0; i<radio.length; i++)
{
if (radio[i].checked) {
return radio[i].value;
}
}

return null;
}


Это во-первых. Во-вторых, Systemnik, пойми наконец: компьютер выполняет твою программу последовательно. Что он делает? Сначала создаёт форму с двумя радиобатонами и одной кнопкой. Затем доходит до скрипта. В скрипте он сначала выполняет синтаксический анализ и, не найдя ошибок, обрабатывает код функций, вводя их в область видимости, т. е. сэтого момента он знает, что такое getRadioValue(), test() и start().

Наконец, он выполняет те инструкции, что стоят вне функций. В Nвоём случае это присвоение значений переменной peremennaya. Какого значения? Которое вернёт функця getRadioValue(). Какое она вернёт значение в тот момент, когда не только Ты ещё не щёлкнул ни на одном радиобатоне, но даже и страница-то не до конца загрузилась? Правильно, null!

После щелчка выполняется функция start(), которая передаёт значение переменной peremennaya в функцию test. Понятно, что сравнение null и с "1", и с "2" даёт отрицательный результат, вот никакие окошки и не открываются.

И общеидейное замечание. Мне непонятна Твоя тенденция всюду использовать глобальные переменные. Там, где без них можно обойтись, их не должно быть вообще! Существуют эмпирические правила написания кода, позволяющие значительно сэкономить силы при отладке. Одно из них гласит: каждая переменная должна иметь настолько узкую область видимости, насколько это возможно. Согласись, что когда у тебя 10 000 строк кода, искать, какая же функция выставляет не так значение глобальной переменной, утомительно! Да и в Твоём простом примере это уже привело к путанице (будь peremennaya локальной переменной функции start(), проблем не возникло бы!).

(Отредактировано автором: 27 Марта, 2008 - 07:25:56)

 
 Top
Systemnik Администратор
Отправлено: 27 Марта, 2008 - 07:31:37
Post Id



ExBB Developer Team


Покинул форум
Сообщений всего: 778
Дата рег-ции: Дек. 2007  

Карма 0




Что т твое объяснение понял.. спасибо

(Отредактировано автором: 27 Марта, 2008 - 07:33:03)

 
 Top
Furax
Отправлено: 27 Марта, 2008 - 07:39:40
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Systemnik
Потому что в Твоём последнем примере больше закрывающих скобок, чем открывающих.

В третий раз говорю, null возвращается только в том случае, если ни одна проверка в цикле не принесла результатов. Значит, return null должен стоять после цикла.

Вот здесь:
CODE:
function getRadioValue(radio)
{
for (var i=0; i<radio.length; i++) {
if (radio[i].checked) {
return radio[i].value;
}

return null;
}
}
return null стоит в цикле. Вот здесь:
CODE:
function getRadioValue(radio)
{
for (var i=0; i<radio.length; i++) {
if (radio[i].checked) {
return radio[i].value;
}
}

return null;
}
После цикла. Нам надо где? После цикла!
 
 Top
Ninguno
Отправлено: 16 Июля, 2008 - 18:46:04
Post Id



Newbie


Покинул форум
Сообщений всего: 46
Дата рег-ции: Июль 2007  
Откуда: оттуда

Карма 0




Извините если не туда попал, но у меня вопрос по форме поиска.
Главная страница моего ресурса к примеру www.primer.hosting.com, сайт у меня по адресу www.primer.hosting.com/site . На нем (движок ReloadCMS 1.2.7) есть поисковой модуль по сайту. И я хочу повесить такой же поисковой модуль у себя на главной странице, но что бы искал по сайту. Один человек написал из исходника поисковой формы сайта вот такой код:

CODE:
<div class="window-title">Поиск</div>
<div class="window-main" style="text-align: left;">
<center><table><tbody><tr><td align="left"><form method="get">
<input name="module" value="search.result" type="hidden">
<input name="search" size="20" value="" type="text">&nbsp;<input value="Найти" type="submit"></form></td></tr><tr valign="middle"><td align="left" valign="middle"></tr></tbody></table></center></div>

<div class="window-main" style="text-align: center;">


Но увы, этот код не заработал - он пытается искать пряма со стартовой страницы, хотя модуль поиска находится на сайте. Помоги пожалуйста его исправить, а то я начинающий еще, и плохо разбираюсь в этом. Улыбка
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0)
« HTML »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0475]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33