Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > narod.ru проверка форм возможна? Можно обойти a[?]


Автор: Иль 3.3.2005, 20:51
на бесплатном сервисе narod.ru для всех полей форм применяется только имена вида "a[что угодно]"
Вроде: input type=text name="a[eMail]"

Можно обойти это ограничение, если используется скрипт проверки ввода данных типа:
Код
function proverka(){
if(document.all.frm.a[eMail].value !=""){
 return true;}
else{
 alert("Вы не заполнили обязательные поля");
 return false;}}

Может есть другое решение

Автор: Иль 4.3.2005, 18:03
Sardar, Aliance, не подскажите, можно это обойти, или забыть и не обращать внимания на непригодные письма приходящие из форм сайта. smile

Aliance, спасибо за приведенную валидацию (то что доктор прописал), а вот защищать от юзверей подменой субмита не буду, пусть пользуют кому надо, лишь бы пустыми и дурацкими письмами не мучали. Жаль эти скобки все портят a[eMail].

Не могу не отметит проверку всех чекбоксов по форме (чтоб отмечен хоть один) предложенную Sardar, завораживает, СПАСИ-Б--БО (с интонацией, как в известном мультике про старого пса и волка), об этом то я и не мечтал, а счастье свалилось.

Автор: Aliance 4.3.2005, 18:15
Пользуйся code!

Цитата
if(document.all.frm.a[eMail].value !=""){

document.all слишком устарела! Пользуйся DOM - document.getElementById("айди_твоего_елемента");

Цитата
Sardar, Aliance, не подскажите,

Мы на винграде не в троем сидим :-) Может стоит всех спрасить? smile))


Цитата
Aliance, спасибо за приведенную валидацию

Завсегда =)

А теперь по сути:

Нужно использовать регульрные выражения!
Только хочу уточнить, не ясно: это на ТВОЕМ хосте? Для твоей формы? Если да, то смысл писать на каком это хостинге? smile JS един на всех, это же не серверный язык smile)

Автор: Иль 4.3.2005, 19:26
Нет, JS не для всех одинаков! smile
Вот смотри, беру твои валидации и проверку чекбатонов от Sardar, ставлю на сайт у платного хостера, переиначиваю под себя предложенную тобой функцию validateForm() и все работает. РАБОТАЕТ! smile
А теперь иду на хост от narod.ru и все обламывается. Ну не работают ни твои ни Sardar скрипты (извини что на ты). Там у всех input'ов можно задать только одно имя, типа "a[Что либо по русски или `англицки]", причем только "a[пиши чего хочешь]" и никак иначе.
Я могу написать на платном хостинге чего захочу, например:
if (isNotEmpty(form.aeMail)) и тд и тп,
но!
на бесплатном хостинге я могу написать только
if (isNotEmpty(form.a[eMail])), ведь у меня имена полей такие и только такие, со скобками [] и скрипты с этими скобками не работают (Script Error), а без скобок CGI на narod.ru работать не будет.
Вот например имена: a[пишите письма дедушке], a[imya], a[familiya], a[feedback] и тд.

smile Почему обратился к тебе и Sardar - ну случайно, ко всем конечно. Вообще вас помню, ваша информация была мне крайне полезна.

Автор: Aliance 4.3.2005, 19:34
Цитата
переиначиваю под себя

Кидай код

Цитата
"a[Что либо по русски или `англицки]",

По русски? Быть не может.

Цитата
скрипты с этими скобками не работают (Script Error),

Какая проблема со скобками, не понимаю...

Цитата
без скобок CGI на narod.ru работать не будет.

Ого, smile smile smile smile , на народе уже появился CGI? smile)) Ого какой я непросвещенный =)

Автор: Иль 4.3.2005, 19:50
Цитата
на народе уже появился CGI?

Всегда были стандартные
Цитата
По русски? Быть не может.

А как ты хоте, по другому у них не бывает, всеж для народа делается. Не, ну можно для JS и на английском написать. Перепишу, не проблема, но у них работает и по русски.
Цитата
Кидай код

Спасибо за участие, сейчас я мигом, уберу воду

Автор: Иль 4.3.2005, 20:28
Код
<script language="JavaScript">
function isNotEmpty(elem){
var str = elem.value;
var re = /.+/;
if(!str.match(re)) {
alert("Нужно заполнить все обязательные поля.");
setTimeout("focusElement('" + elem.form.name + "', '" + elem.name + "')", 0);
return false;}else{return true;}}

function focusElement(formName, elemName){
var elem = document.forms[formName].elements[elemName];elem.focus();elem.select();}

function validateForm(form){
if (isNotEmpty(form.a[eMail])) {
return true;}return false;}
</script>
</head>
<body>
<form name="forma" enctype="multipart/form-data"action="http://narod.yandex.ru/send-poll.xhtml"method=POST onsubmit="return false;">
<input type=text name="a[eMail]">
<input type="button" onclick="if (validateForm(this.form)) {this.form.submit() };" />
</form>
</body>
</html>

Автор: Aliance 4.3.2005, 20:42
Цитата
<form name="forma" enctype="multipart/form-data"action="http://narod.yandex.ru/send-poll.xhtml"method=POST onsubmit="return false;">

Пробел поставь...

Млин :-) Есесно так получаеться, а ты чего хотел. Нужно имя аргументом передавать, иначе массив получасеЦа smile

ЗЫ:

Пользуйся code. Пользуйся предпросмотром.

Цитата
А как ты хоте, по другому у них не бывает, всеж для народа делается. Не, ну можно для JS и на английском написать. Перепишу, не проблема, но у них работает и по русски.

Не поверю пока сам не проверю. Такого быть не может.
Что у них на русском? JS - так это не от хостинга зависит...

ЗЗЫ: жаль Sardar`а временно нет =( некому модерировать топ =(

Автор: Иль 4.3.2005, 21:44
Да пробел дело вкуса, бог с ним, с пробелом, без него работает(ну за искл переносимости img из шаблонов дримвивера).
Цитата
Не поверю пока сам не проверю.
Да не, я тебя понял, на русском может быть часть имени поля:
Код
<input type=text name="a[ здрасте, я ваша тетя ]">

В принципе у меня это уже более спортивный интерес, поэтому можно и smile если идей не будет.
Спасибо большое, Aliance, успехов smile

Автор: Aliance 4.3.2005, 22:12
Цитата
Да пробел дело вкуса, бог с ним, с пробелом, без него работает (не знал?) (ну за искл переносимости img из шаблонов дримвивера в документы).

Убийственная цитата. Да черт с ним, с этим программированием...
Код

иврипвр юло п =отпо ывдшо з9 шш

Тоже заработает, чего там, делов-то...

Цитата
на русском может быть часть имени поля:

Может ты путаешь с value? smile На русском быть не может! Языки не обрабатывают русский язык! (нет, ну написать-то ты хоть на монгольском сможешь - только обратиться к полю корректно не сможешь ни в JS, нигде еще...)

Цитата
но на что-то кардинальное типа попапов и тд и тп однозначно не решусь.

При чем тут попапы? Почему это координальное? smile

Цитата
А ведь выход есть, чутье говорит

А я тебе не выход написал? smile smile

Автор: Иль 5.3.2005, 19:01
Цитата
Нужно имя аргументом передавать, иначе массив получасеЦа
smile Напиши, пожалуйста, как это (JS совсем плохо знаю). Проковырялся научным тыком, посмотрел разные скрипты и не пойму как это имя "a[eMail]" аргументом передать вот в это место кода
Код
isNotEmpty(form.a[eMail])
isNotEmpty(??????????)
Цитата
Убийственная цитата. Да черт с ним, с этим программированием...
Aliance, ты чего smile !!! Ты у себя на сайте почему положенные по спецификации кавычки не расставляешь(cellSpacing=0 cellPadding=0)! Правильно, и без них работает, дык чего тебе мой HTML дался?
Цитата
Может ты путаешь с value?  На русском быть не может!
ОБИЖАЕШЬ!!! програмистам из Яндекса поверишь? Если нет, дам адрес, сходи полюбуйся. Пойми, добрый человек smile, у меня это работает, лично у меня. Я вообще тут проблемы не вижу. Может кому-то и лень лишнее програмировать, а на Яндексе не лень.

Господи, реши проблему передачи имени аргументом smile . Aliance, помоги господу smile, очень жажду !

Автор: Иль 5.3.2005, 20:03
ААААААААААААААА
УУУУУУУУУУУУУУУ
Ура Ура Ура

Я созрел. Ну какой же я невнимательный!!!
Цитата
Пользуйся DOM - document.getElementById("айди_твоего_елемента");
Эта твоя "пользуйся DOM" сбила меня с толку (к стати, мне нахрен не нужная smile , тк пользуюсь твоей валидацией не думая о всяких Объектах) и я не обратил внимания на ключевую для меня
Цитата
айди_твоего_елемента
, ну конечно! А как же скрипт будет обращатся к элементу без id!
Эй, Aliance, ты знаешь, как я счастлив. Спасибо спасибо спасибо, спасибо.
Я пошел страгать код.
Aliance, что я могу для тебя сделать, повелитель smile smile smile smile smile smile smile smile smile !

Автор: Aliance 5.3.2005, 21:29
Цитата
Проковырялся научным тыком

Советую начать учить JS просто :-)

Цитата
положенные по спецификации кавычки

Ты про спецификацию XHTML говоришь, а я про другую smile Неважно smile

Цитата
ОБИЖАЕШЬ!!!

На самом деле я не знаю и могу ошибаться, но это действительно моему уму не понять 8))

Цитата
Aliance, помоги господу

Скромно ты так : )))))))

Цитата
(к стати, мне нахрен не нужная

smile

Цитата
Aliance, что я могу для тебя сделать, повелитель

Быть внимательнее smile Стараться выражаться корректно smile
А вообще, на данном форуме есть функция Репутация -
http://forum.vingrad.ru/index.php?act=rep&CODE=03&mid=5467 ))

Автор: Иль 6.3.2005, 00:26
Угу, понял и JS учить буду. Надеюсь кому-нибудь, когда-нибудь и я помогу. Про репутацию - понимаю, да и наследил (есть тут чего Sardar'у модерировать smile ). А про DOM не обижайся, эмоции захлестнули, кудаж без него.
Всего доброго, спасибо, Илья.

Автор: Aliance 6.3.2005, 00:54
Цитата
Про репутацию - понимаю, да и наследил

Видимо ты не так понял smile

Цитата
А про DOM не обижайся, эмоции захлестнули, кудаж без него.

smile

Всего доброго, теска smile

Автор: Иль 6.3.2005, 09:33
Цитата
Видимо ты не так понял
Верно smile ! Роюсь сейчас в Помощи, чтоб уяснить что и как.

Автор: Aliance 6.3.2005, 16:16
Репутация - уровень, отобажающий отношение других пользователей к данному.
Например, за мат, оскорбление и т.п. обычно понижают репутацию, гажимая на [-] под аватарам юзера, и поощеряют, нажимая [+] под аватаром, за подсказку, помощь, хороший код и т.д. 8))

Автор: Sardar 11.3.2005, 18:34
Ёлки! Мне это вычистить не под силу smile

Иль если проблема со скобками в имени была, то решается через "обрщение по индексу":
Код
function proverka(){
  if(document.forms.frm.elements["a[eMail]"].value !="") return true;
  alert("Вы не заполнили обязательные поля");
  return false;
}


Мы просто указали поле как индекс, передав строковое имя.

Автор: Иль 12.3.2005, 21:17
О-О-О!!!
Изначально думал о подобном решении, об id даже не задумывался.
Теперь полный восторг от Винграда!
Спасибо!

Автор: Greendrake 9.12.2005, 10:29
В форме несколько INPUTов c именами a[1], a[2].... a[n]

Как обратиться к конкретному из них?

document.forms['frm'].a[x] не работает

document.getElementById('a[x]') не работает в Мозилле и Файрфоксе

Проблемный код:

HTML
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Глюк</title>
<meta http-equiv="Content-Language" content="ru">
<script language="JavaScript">
function s()
{
alert(document.getElementById("nnn[1]").value);
}
</script>
</head>
<body>
<form name="frm">
<input type="text" value="oh yes" name="nnn[1]" />
<input type="button" onclick="s()" />
</form>
</body>
</html>


P.S. 2 Aliance: хотелось бы вместе с посылом к поиску видеть конкретный пример поискового запроса, приводящего к этой теме, или ключевые слова. Я пытался отыскать, но не нашёл.

Автор: Zeroglif 9.12.2005, 12:07
Greendrake

Дружище, всего на 2 поста выше в этом топике написано решение (Sardar). Есть ещё топики про то же самое:

http://forum.vingrad.ru/index.php?showtopic=68159
http://forum.vingrad.ru/index.php?showtopic=65138

На всякий случай уточню:

Код

alert(document.forms["frm"]["nnn[1]"].value)


Это дело называется Square Bracket Notation (SBN), можешь ознакомиться подробнее тут: http://jibbering.com/faq/faq_notes/square_brackets.html Твой случай описан там в разделе Illegal characters in Identifier-strings.

smile С учётом того, что терминологически трудно составить поисковый запрос на такого рода вопросы, а вопросы эти постоянно повторяются, может имеет смысл вынести тему в FAQ?


Автор: Sardar 9.12.2005, 12:38
Как обратиться к полю формы, в имени которого есть контрольные символы, например []?

Просто указываем полное имя в виде строки:

Код
var form=document.getElementById('myform');
form.elements['myfield[]'].value=90;
form.elements['myfield[6]'].value=100;


Этот приём "индексирования" применим для любых обьектов в JS. Имена полей могут иметь любые символы:

Код
var a={
 "field":"test",
 "my super field[]": 90,
 "~!@##%^&*+-*/": 100
};
alert(a.field);
alert(a["my super field[]"]);
alert(a["~!@##%^&*+-*/"]);


Этой свободой можно пользоваться при построении словарей, но нужно учитывать что все обьекты наследуют интерфейс от Object, так что такие ключи как "toString", "wait" и т.д. приведут к неожиданным результатам.
Выход: добавлять тильду '~' перед своим ключём, тогда точно конфликтов с именами не будет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)