2014-12-18 3 views
1

Булевы будут работать до установки переменных внутри функции, но не после? Все переменные взяты из форм, кроме «статуса».Очень странная проблема с javascript с booleans

Вот функция:

<script src="js/main.js"></script> 
<script src="js/ajax.js"></script> 
<script> 
function signup(){ 

// if(1==1){      -----When I place this here, the alert comes up. 
//   alert("yes"); 
// } 
var u = _("username").value; 
var e = _("email").value; 
var p1 = _("pass1").value; 
var p2 = _("pass2").value; 
var c = _("country").value; 
var g = _("gender").value; 
var a = _("age").value; 
var o = _("occ").value; 
var status = _("status"); 

// Nothing below here works 

if(u == "" || e == "" || p1 == "" || p2 == "" || c == "" || g == "" || a == "" || o == ""){ 
status.innerHTML = "Fill out all of the form data"; 
    alert("true"); 
} else if(p1 != p2){ 
    status.innerHTML = "Your password fields do not match"; 

} 

else if(_("terms").style.display == "none"){ 
    status.innerHTML = "Please view the terms of use"; 
} else { 
    _("signupbtn").style.display = "none"; 
    status.innerHTML = 'please wait ...'; 
    var ajax = ajaxObj("POST", "signupfront.php"); 
ajax.onreadystatechange = function() { 
    if(ajaxReturn(ajax) == true) { 
     if(ajax.responseText != "signup_success"){ 
       status.innerHTML = ajax.responseText; 
       _("signupbtn").style.display = "block"; 
      } else { 
       window.scrollTo(0,0); 
       _("signupform").innerHTML = "OK "+u+", check your email inbox and junk mail box at <u>"+e+"</u> in a moment to complete the sign up process by activating your account. You will not be able to do anything on the site until you successfully activate your account."; 
} 
    } 
    } 
    ajax.send("u="+u+"&e="+e+"&p="+p1+"&c="+c+"&g="+g+"&a="+a+"&o="+o); 
} 
} 

Эта функция вызывается с помощью кнопки, и я хочу, чтобы функция возвращала сообщения рядом с кнопкой.

<button id="signupbtn" onclick="signup()">Create Account</button> 
<span id="status"></span> 

main.js содержит следующее:

function _(x){ 
    return document.getElementById(x); 
} 

Любая помощь с этим было бы весьма признателен, как я смотрел на нее в течение нескольких часов и не могу понять его. Заранее спасибо

Вот HTML по запросу:

<body> 

<div id="pageMiddle"> 
    <h3>Create Account</h3> 
    <form name="signupform" id="signupform" onsubmit="return false;"> 
    <div>Username: </div> 
    <input id="username" type="text" onblur="checkusername()" onkeyup="restrict('username')" maxlength="16"> 
    <span id="unamestatus"></span> 
    <div>Email Address:</div> 
    <input id="email" type="text" onfocus="emptyElement('status')" onkeyup="restrict('email')" maxlength="88"> 
    <div>Create Password:</div> 
    <input id="pass1" type="password" onfocus="emptyElement('status')" maxlength="16"> 
    <div>Confirm Password:</div> 
    <input id="pass2" type="password" onfocus="emptyElement('status')" maxlength="16"> 
    <div>Age:</div> 
    <input id="age" type="text" onfocus="emptyElement('status')" maxlength="3"> 
    <div>Occupation:</div> 
    <input id="occ" type="text" onfocus="emptyElement('status')" maxlength="88"> 
    <div>Gender:</div> 
    <input type="radio" name="gender" value="m">Male 
    <input type="radio" name="gender" value="f">Female 
    <div>Country:</div> 
    <select id="country" onfocus="emptyElement('status')"> 
    //long list of countries here 
    </select> 
    <div> 
     <a href="#" onclick="return false" onmousedown="openTerms()"> 
     View the Terms Of Use 
     </a> 
    </div> 
    <div id="terms" style="display:none;"> 
     <h3>Our Terms Of Use</h3> 
     <p>v</p> 
    </div> 
    <br /><br /> 
    <button id="signupbtn" onclick="signup()">Create Account</button> 
    <span id="status"></span> 
    </form> 
</div> 
</body> 
+2

Это похоже на ошибку JavaScript перед тем, как перейти ко второму набору операторов. Вы уверены, что в консоли нет ошибок? –

+0

Как я могу проверить это? –

ответ

0

Посмотрите на gender вход

<div>Gender:</div> 
<input type="radio" name="gender" value="m">Male 
<input type="radio" name="gender" value="f">Female 

Вот ваша ошибка

var g = _("gender").value; 

Кодекса перерывов в строке выше, потому что вы пытаетесь получить значение элемента с идентификатором равных gender, но нет элемента с атрибутом id="gender".

Вы должны изменить гендерный вход к следующему, где радио кнопка имеет уникальный идентификатор (genderMale и genderFemale)

<div>Gender:</div> 
<input type="radio" name="gender" id="genderMale" value="m">Male 
<input type="radio" name="gender" id="genderFemale" value="f">Female 

затем использовать следующий синтаксис для присвоения значения выбранного пола в g переменная

var g = ""; 
if (document.getElementById("genderMale").checked) { 
    g = _("genderMale").value; 
} else if (document.getElementById("genderFemale").checked) { 
    g = _("genderFemale").value; 
} 

Ниже приводится модифицированный часть JavaScript

var u = _("username").value; 
var e = _("email").value; 
var p1 = _("pass1").value; 
var p2 = _("pass2").value; 
var c = _("country").value; 
var a = _("age").value; 
var o = _("occ").value; 
var status = _("status"); 
var g = ""; 
if (document.getElementById("genderMale").checked) { 
    g = _("genderMale").value; 
} else if (document.getElementById("genderFemale").checked) { 
    g = _("genderFemale").value; 
} 

if (u == "" || e == "" || p1 == "" || p2 == "" || c == "" || g == "" || a == "" 
    || o == "") { 
    status.innerHTML = "Fill out all of the form data"; 
    alert("true"); 
} 

Демонстрация: http://jsfiddle.net/zpeu4fq9/1/

+0

Большое спасибо, это сработало сразу. –

0

Попробуйте использовать этот

if(1===1){      
    alert("yes"); 
} 

if(u === "" || e === "" || p1 === "" || p2 === "" || c === "" || g === "" || a === "" || o === ""){ 
    status.innerHTML = "Fill out all of the form data"; 
    alert("true"); 
} else if(p1 != p2){ 
    status.innerHTML = "Your password fields do not match"; 

} 

надеюсь, что это поможет

1

, если любой из ваших input полей, которые вы ссылаетесь в объявление переменной не существует, ваш код не будет работать, потому что вы вызываете .value в неопределенное поле.

опубликуйте HTML, и мы можем понять это.

Смежные вопросы