С этой частью все в порядке (я взял на себя смелость исправить отступ):
function checknewaccount(){
if(emailvalid()&& checkname() && passwordcheck())
{
return true;
}
else{
return false;
}
}
Хотя вы можете улучшить его:
function checknewaccount(){
return emailvalid() && checkname() && passwordcheck();
}
Эта часть является ошибкой синтаксиса(мягко говоря):
function emailvalid(), checkname(), passwordcheck(){
if(condition){
return true;}
else{return false;}
Если это не реальная цитата из вашего кода, вам придется обновить свой вопрос (хотя я, возможно, не буду здесь, чтобы обновить этот ответ).Нет особого смысла спрашивать о коде и затем цитировать псевдокод в вопросе.(По крайней мере, в псевдокоде отсутствует окончательный }
.)
То же самое относится и к вашим функциям в виде:
function emailvalid()
{
if(email condition)
{
return true;
}
else {
return false;
}
}
Это нормально (при условии, что email condition
является все еще psuedocode), но нет необходимости в if
:
function emailvalid()
{
return email condition;
}
С точки зрения "ничего не происходит", убедитесь, что выесть инструменты отладки, которые вы можете использовать.В Chrome встроены инструменты разработки, просто нажмите Ctrl + Shift + I.Для Firefox вы можете установить отличный Firebug.В последние версии IE также встроены средства разработки (для более старых версий вы можете скачать бесплатную версию Visual Studio, которую можно подключить к браузеру).Любой из них расскажет вам о синтаксисе и других ошибках, позволит вам пройтись по вашему заявлению кода за оператором и т. Д., Что крайне важно для выяснения того, что происходит.
Вот быстро набросанная версиячто я думаю ты пытаешься сделатьЯ бы так не поступил, но я внес минимальные изменения, чтобы он работал:
HTML:
<form action="http://www.google.com/search"
method="GET" target="_blank"
onsubmit="return checknewaccount()">
<input type="text" id="email" name='q' onblur="emailvalid()">
<input type="text" id="username" onblur="checkname()" >
<input type="password" id="password" onkeyup="passwordcheck()">
<input type="submit" value="New">
</form>
Примечания по этому поводу:
- Как указал Basiclife , ваш код
form
имеет проблемы.Они исправлены выше. - Выше я использовал
action="http://www.google.com/search"
, но, конечно, для вас это будет action="accountcode.php"
(или, по крайней мере, я так думаю). - Использование
onsubmit
для обработчика отправки формы, а не onclick
для кнопки отправки.Вы не можете надежно отменить отправку формы через браузер с помощью кнопок onclick
. - В
onsubmit
, убедитесь, что вы используете return
- например, onsubmit="return checknewaccount()"
, а не onsubmit="checknewaccount()"
-потому что мы хотим убедиться, что материал события видит возвращаемое значение.Нам все равно, если материал события не увидит возвращаемое значение других наших проверок (onblur="emailvalid()"
), но если бы мы это сделали, нам также потребовалось бы return
s. - Толькоодно из полей выше имеет атрибут
name
;никто из вас не делает.Только поля с name
атрибутами отправляются с формами.Я использовал только один name
для своего примера, потому что я хочу отправить только одно поле в Google, но для ваших целей вам понадобятся атрибуты name
во всех трех полях. В этой краткой статье обсуждается id
против name
и для чего они нужны.Иногда вам нужны оба. - Я поместил атрибуты в нижний регистр, что является наилучшей практикой (и требуется, если вы хотите использовать XHTML).
- Однако я удалил
/
от концов inputs
.Это немного не по теме, но на том уровне, на котором вы работаете, вы не хотите пытаться использовать XHTML, используйте HTML.Правильно использовать XHTML технически сложно, как при создании, так и при настройке сервера, и даже в этом случае вы должны использовать его в качестве супа тега для IE, иначе он не будет обрабатываться должным образом.XHTML имеет свое место, но в подавляющем большинстве случаев нет причин его использовать. - С учетом вышесказанного в сочетании с приведенным ниже JavaScript, нет никакой цели для обработчиков отдельных полей.Я оставил их, потому что я предполагаю, что вы делаете больше, чем просто проверки ниже - ниже приведен пример, показывающий, как эти обработчики делают что-то полезное.
JavaScript:
function checknewaccount() {
return emailvalid() && checkname() && passwordcheck();
}
function emailvalid() {
var element;
// Get the email element
element = document.getElementById('email');
// Obviously not a real check, just do whatever your condition is
return element.value.indexOf('@') > 0;
}
function checkname() {
var element;
// Get the username element
element = document.getElementById('username');
// Obviously not a real check, just do whatever your condition is
return element.value.length > 0;
}
function passwordcheck() {
var element;
// Get the username element
element = document.getElementById('password');
// Obviously not a real check, just do whatever your condition is
return element.value.length > 0;
}
Live copy
Вещи немного изменятся, если emailvalid
, et.al., функции собираются сделать что-то, чтобы пользователь знал, что поля недействительны, например, выделение их меток:
HTML:
<form action="http://www.google.com/search"
method="GET" target="_blank"
onsubmit="return checknewaccount()">
<label>Email:
<input type="text" id="email" name='q' onblur="emailvalid()"></label>
<br><label>Username:
<input type="text" id="username" onblur="checkname()" ></label>
<br><label>Password:
<input type="password" id="password" onkeyup="passwordcheck()"/></label>
<br><input type="submit" value="New">
</form>
JavaScript:
function checknewaccount() {
var result;
// Because we're actually doing something in each of the
// three functions below, on form validation we want to
// call *all* of them, even if the first one fails, so
// they each color their field accordingly. So instead
// of a one-liner with && as in the previous example,
// we ensure we do call each of them:
result = emailvalid();
result = checkname() && result;
result = passwordcheck() && result;
return result;
}
function emailvalid() {
var element, result;
// Get the email element
element = document.getElementById('email');
// Obviously not a real check, just do whatever your condition is
result = element.value.indexOf('@') > 0;
// Update our label and return the result
updateLabel(element, result);
return result;
}
function checkname() {
var element, result;
// Get the username element
element = document.getElementById('username');
// Obviously not a real check, just do whatever your condition is
result = element.value.length > 0;
// Update our label and return the result
updateLabel(element, result);
return result;
}
function passwordcheck() {
var element, result;
// Get the username element
element = document.getElementById('password');
// Obviously not a real check, just do whatever your condition is
result = element.value.length > 0;
// Update our label and return the result
updateLabel(element, result);
return result;
}
function updateLabel(node, valid) {
while (node && node.tagName !== "LABEL") {
node = node.parentNode;
}
if (node) {
node.style.color = valid ? "" : "red";
}
}
Живая копия