Проблема с функцией Javascript - PullRequest
0 голосов
/ 23 марта 2011

Я, как правило, пишу свой javascript как большие блоки кода без большого количества переменных или функций, но решил привести себя в порядок!Ниже приведена попытка написания более чистой версии скрипта, которая скрывает определенные элементы формы в зависимости от значения раскрывающегося списка.

Скрипт работал отлично, прежде чем я попытался привести его в порядок, но теперь я не вижу, гдепроблема в?Может ли кто-нибудь сообщить мне о любых проблемах с моим синтаксисом здесь.Извиняюсь за очень конкретный пост.

Спасибо,

Rich

function hideTitle(hide){
    if(hide = "true"){
        document.admin.title.style.display="none";
        document.getElementById("titleText").style.display="none";
    };
    else if(hide = "false"){
        document.admin.title.style.display="inline";
        document.getElementById("titleText").style.display="inline";
    };
};

function hideSocMedLinks(hide){
    if(hide = "true"){
        document.admin.facebookLink.style.display="none";
        document.admin.twitterLink.style.display="none";
        document.getElementById("fbtext").style.display="none";
        document.getElementById("twittext").style.display="none";
    };
    else if(hide = "false"){
        document.admin.facebookLink.style.display="block";
        document.admin.twitterLink.style.display="block";
        document.getElementById("fbtext").style.display="inline";
        document.getElementById("twittext").style.display="inline";
    };
};

function hideWebLink(hide){
    if(hide = "true"){
        document.admin.webLink.style.display="none";
        document.getElementById("webtext").style.display="none";
    };
    else if(hide = "false"){
        document.admin.webLink.style.display="block";
        document.getElementById("webtext").style.display="inline";
    };
};

function toggleFormElements(){
    if(document.admin.pageType.options[document.admin.pageType.selectedIndex].value == "homePage"){
        hideTitle("true");
        hideSocMedLinks("true");
        hideWebLink("true");
    };
    else if(document.admin.pageType.options[document.admin.pageType.selectedIndex].value == "socialMedia"){
        hideTitle("false");
        hideSocMedLinks("false");
        hideWebLink("true");
    };
    else if(document.admin.pageType.options[document.admin.pageType.selectedIndex].value == "webDesign"){
        hideTitle("false");
        hideSocMedLinks("true");
        hideWebLink("false");
    };
};

Ответы [ 6 ]

2 голосов
/ 23 марта 2011

Вам нужно использовать двойное равенство (==) для проверки на равенство.Единственное равенство, которое в настоящее время находится в ваших операторах if, назначит значение, которое, по вашему мнению, вы проверяете, и оцените как true.Другими словами, для почти всех значений 'hide' будет выполняться if, а не только значение 'true'.

function hideSocMedLinks(hide){
    if(hide == "true"){
        document.admin.facebookLink.style.display="none";
        document.admin.twitterLink.style.display="none";
        document.getElementById("fbtext").style.display="none";
        document.getElementById("twittext").style.display="none";
    }
    else if(hide == "false"){
        document.admin.facebookLink.style.display="block";
        document.admin.twitterLink.style.display="block";
        document.getElementById("fbtext").style.display="inline";
        document.getElementById("twittext").style.display="inline";
    }
}
2 голосов
/ 23 марта 2011

Удаление ненужных точек с запятой должно решить проблему.

function hideTitle(hide){
    if(hide = "true"){
        document.admin.title.style.display="none";
        document.getElementById("titleText").style.display="none";
    }
    else if(hide = "false"){
        document.admin.title.style.display="inline";
        document.getElementById("titleText").style.display="inline";
    }
}

function hideSocMedLinks(hide){
    if(hide = "true"){
        document.admin.facebookLink.style.display="none";
        document.admin.twitterLink.style.display="none";
        document.getElementById("fbtext").style.display="none";
        document.getElementById("twittext").style.display="none";
    }
    else if(hide = "false"){
        document.admin.facebookLink.style.display="block";
        document.admin.twitterLink.style.display="block";
        document.getElementById("fbtext").style.display="inline";
        document.getElementById("twittext").style.display="inline";
    }
}

function hideWebLink(hide){
    if(hide = "true"){
        document.admin.webLink.style.display="none";
        document.getElementById("webtext").style.display="none";
    }
    else if(hide = "false"){
        document.admin.webLink.style.display="block";
        document.getElementById("webtext").style.display="inline";
    }
}

function toggleFormElements(){
    if(document.admin.pageType.options[document.admin.pageType.selectedIndex].value == "homePage"){
        hideTitle("true");
        hideSocMedLinks("true");
        hideWebLink("true");
    }
    else if(document.admin.pageType.options[document.admin.pageType.selectedIndex].value == "socialMedia"){
        hideTitle("false");
        hideSocMedLinks("false");
        hideWebLink("true");
    }
    else if(document.admin.pageType.options[document.admin.pageType.selectedIndex].value == "webDesign"){
        hideTitle("false");
        hideSocMedLinks("true");
        hideWebLink("false");
    }
}
2 голосов
/ 23 марта 2011

У вас есть точки с запятой (;) после ваших операторов if - это может быть причиной ваших синтаксических проблем. Смотрите стрелки ниже:

function hideTitle(hide){
    if(hide = "true"){
        document.admin.title.style.display="none";
        document.getElementById("titleText").style.display="none";
    }; <----
    else if(hide = "false"){
        document.admin.title.style.display="inline";
        document.getElementById("titleText").style.display="inline";
    }; <----
};
1 голос
/ 23 марта 2011

Как уже упоминали другие, точки с запятой (;) после закрывающих скобок (}) перед каждым else должны быть удалены, но я вижу еще одну проблему, заключающуюся в том, что вы используете одинаковые внутри ваши if заявления. В Javascript один знак равенства всегда будет пытаться присвоить левой стороне. Для сравнения вы хотите получить двойное или тройное равенство (== или ===).

1 голос
/ 23 марта 2011

Удалите точку с запятой после закрытия } во всех ваших if / else блоках. Кроме того, вы передаете логическое значение true/false вашей функции или вы передаете строку "true"/"false"?

// This is incorrect
if (stuff) {
  // stuff
};
else if {
  // etc...
};

// Should be
if (stuff) {
  // stuff
}
else if {
  // etc...
}
1 голос
/ 23 марта 2011

Вы не должны ставить ; s после блоков кода.

В частности, ; s после того, как ваши if s заканчивают блоки if, в результате чего else s не присоединяются.

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