JS, если заявление не работает должным образом - PullRequest
0 голосов
/ 05 декабря 2010

Я работаю над этим сценарием, и по какой-то причине он действует так, как будто fn.style.borderColor всегда равен # F00.Все, что я хочу, это чтобы второй выполнялся, если и только если первый, если был выполнен.

function vfn() {
   if (fnl<1){
      na.innerHTML= "This field is required.";
      fn.style.borderColor="#F00";
   } 
   else if (fn.style.borderColor="#F00" && fnl>1) {
      if(lnl>1){
         na.innerHTML= "OK";
         setTimeout("na.innerHTML = ''",1500)
      }
      fn.style.borderColor="#0F0";
      setTimeout("fn.style.borderColor='';",1500)
   }
   return false
}

Я пытался использовать переменные и делал что-то подобное, но это не сработало вообще.

var error = 1
if (error = 1) {
    alert("error1");
    var error = 2
}
else if (error == "2") {
    alert("error2")
    var error = 1
}

Так как я могу заставить эту работу работать?

------------------------------------- >> EDIT << ------------------------------------ </p>

Хорошо, поэтому я изменил это на

  function vfn() {
      if (fnl<1){
        na.innerHTML= "This field is required.";
        fn.style.borderColor="#F00";
        }
      else if (fn.style.borderColor == "#F00" && fnl>1){
        if(lnl>1){
            na.innerHTML= "OK";
            setTimeout("na.innerHTML = ''",1500)}
        fn.style.borderColor="#0F0";
        setTimeout("fn.style.borderColor='';",1500)
        }

        return false}

и происходит то, что цвет рамки меняется на красный, когда поле пустое, что и должно происходить, но когда поле заполнено правильно, оно ДОЛЖНО изменить цвет на зеленый, затем через 1,5 секунды изменить обратнопо умолчанию, но вместо этого фактически происходит то, что он остается красным, как если бы он игнорировал блок кода else if, даже если поле уже красное (fn.style.borderColor = "# F00").

Ответы [ 2 ]

6 голосов
/ 05 декабря 2010

Распространенная ошибка / опечатка: вы используете = (назначение) вместо == (сравнение).Измените:

else if (fn.style.borderColor="#F00"

на

else if (fn.style.borderColor=="#F00"

Обновление: Я бы предложил попробовать ваш предыдущий подход с использованием дополнительной переменной, хотя вы моглиподобная ошибка там, которая заставила это не работать прежде.Попробуйте сохранить флаг, указывающий состояние, вместо явного сравнения borderColor, поскольку браузер может изменить свое внутреннее представление с #F00 на что-то другое:

var isRed = false;
function vfn() {
   if (fnl<1){
      na.innerHTML= "This field is required.";
      fn.style.borderColor="#F00";
      isRed = true;
   } 
   else if (isRed && fnl>1) {
      if(lnl>1){
         na.innerHTML= "OK";
         setTimeout("na.innerHTML = ''",1500)
      }
      fn.style.borderColor="#0F0";
      isRed = false;
      setTimeout("fn.style.borderColor='';",1500)
   }
  return false
}
0 голосов
/ 05 декабря 2010

Попробуйте сделать еще что-нибудь, если оно выглядит так:

else if (fn.style.borderColor == "rgb(255, 0, 0)" && fnl>1){

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...