我需要保留前一个if语句的值,然后在下一个if语句(authorId = 2)中使用另一个名称(但是相同的值)打印前一个if语句中的值。
我的意思是我需要保留if语句的值(authorId === 1),然后在下一个if语句(authorId = 2)中将其打印为另一个值。 所以我需要保留authorSurname.value(id = 1)并将其作为secondAuthor.value打印在if语句(authorId = 2)中,因为在if语句(authorId = 2)中,字符串authorSurname采用另一个值。我的代码是:
你能告诉我怎么解决它?
<!DOCTYPE HTML>
<html lang='pl'>
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1'>
<link rel='stylesheet' href='css/style.css'>
<!-- dynamic form - script -->
<script type="text/javascript">
window.onload = Load;
var numberOfAuthors = 0;
function Load()
{
document.getElementById('add_input').onclick = AddElement;
}
function AddElement()
{
var element1 = document.createElement('input');
var element2 = document.createElement('input');
var element3 = document.createElement('input');
var label1 = document.createElement('label');
var label2 = document.createElement('label');
var label3 = document.createElement('label');
var button = document.createElement('input');
var number = numberOfAuthors;
label1.innerHTML = "</br>Next Author's Name "+"</br>";
label1.setAttribute('id', 'authorNameLabel' + number);
element1.setAttribute('type', 'text');
element1.setAttribute('id', 'authorName' + number);
element1.setAttribute('placeholder', "author's name");
label1.appendChild(element1);
label2.innerHTML = "</br>Next Author's Initials " + "</br>";
label2.setAttribute('id', 'authorInitialsLabel' + number);
element2.setAttribute('type', 'text');
element2.setAttribute('id', 'authorInitials' + number);
element2.setAttribute('placeholder', "Author's Initials...");
label2.appendChild(element2);
label3.innerHTML = "</br>Next Author's surname" + '</br>';
label3.setAttribute('id', 'authorSurnameLabel' + number);
element3.setAttribute('type', 'text');
element3.setAttribute('id', 'authorSurname' + number);
element3.setAttribute('placeholder', "Author's surname...");
label3.appendChild(element3);
button.setAttribute('onclick', 'removeAuthor(' + number + ')');
button.setAttribute('type', 'button');
button.setAttribute('id', 'removeAuthorButton' + number);
button.setAttribute('value', 'Button');
document.forms['add_file'].appendChild(label1);
document.forms['add_file'].appendChild(label2);
document.forms['add_file'].appendChild(label3);
document.forms['add_file'].appendChild(button);
numberOfAuthors++;
}
function removeELement(id) {
var elem = document.getElementById(id);
return elem.parentNode.removeChild(elem);
}
function removeAuthor(authorId){
removeELement("authorName"+authorId);
removeELement("authorInitials"+authorId);
removeELement("authorSurname"+authorId);
removeELement("removeAuthorButton"+authorId);
removeELement("authorNameLabel"+authorId);
removeELement("authorInitialsLabel"+authorId);
removeELement("authorSurnameLabel"+authorId);
numberOfAuthors--;
getText();
}
function getText(){
console.log(numberOfAuthors);
var div = document.getElementById("readyorder");
var firstAuthorName = document.getElementById("firstAuthorName");
var firstAuthorInitials = document.getElementById("firstAuthorInitials");
var firstAuthorSurname = document.getElementById("firstAuthorSurname");
// var secondAuthorSurname =
for(var authorId = 0 ; authorId < numberOfAuthors ; authorId++ ){
var authorName = document.getElementById("authorName"+authorId);
var authorInitials = document.getElementById("authorInitials" + authorId);
var authorSurname = document.getElementById("authorSurname" + authorId);
}
var publisher = document.getElementById("publisher");
var page = document.getElementById("page");
var pageOther = document.getElementById("pageOther");
var pageOtherValue = pageOther.value;
if(pageOther.value!=""){
pageOtherValue = "-" + pageOther.value;
}else{
pageOtherValue = "";
}
var year = document.getElementById("year");
var secondAuthorSurname;
if(authorId === 0) {
div.innerHTML = firstAuthorSurname.value + " (" + year.value + ", s."+page.value + pageOtherValue + ") states that, że \".......\" " + ")"}
else if (authorId === 1) {
div.innerHTML = firstAuthorSurname.value + " i " + authorSurname.value + " (" + year.value + ") state that \".......\";
var secondAuthorSurname = authorSurname.value;
}
else if (authorId === 2) {
// I need to keep the value from authorSurname.value from the if statement above and use it as the secondAuthorSurname below
//authorSurname takes different value because of the loop
var secondAuthorSurname = authorSurname;
div.innerHTML = firstAuthorSurname.value + ", " + secondAuthorSurname.value + " and " + authorSurname.value + " (" + year.value + ") state that \".......\";
}
}
function handlePages(){
var cboxPageRange = document.getElementById("cboxPageRange");
if (cboxPageRange.checked){
var pageOther = document.getElementById("pageOther");
pageOther.style.display="block";
}else{
var pageOther = document.getElementById("pageOther");
pageOther.style.display="none";
pageOther.value="";
getText();
}
}
</script>
</head>
<body>
<div class='container'>
<!-- header -->
<header>
<img src="images/header.jpg" alt=""/>
</header>
<!-- static form 1 -->
First Author's Name <br />
<input type="text" id="firstAuthorName" /> <br />
First Author's Initials <br />
<input type="text" id="firstAuthorInitials" /> <br />
First Author's Surname <br />
<input type="text" id="firstAuthorSurname" /> <br />
<!-- dynamic form -->
<input type="submit" value="Add author" id="add_input" />
<form name="add_file" enctype="multipart/form-data" method="post">
</form>
<div id="readyorder"></div><br/>
<!-- static form 2 -->
Publisher<br />
<input type="text" id="publisher"><br />
Page<br />
<input type="text" id="page">
<input type="checkbox" id="cboxPageRange" value="pageRangeCheckbox" onclick="handlePages()">
<input type="text" id="pageOther" class="pageOther">
<br>
Year<br>
<input type="text" id="year"><br/>
<input type="submit" value="check" onclick="getText()" /> <br/><br/>
<!-- readyorder -->
<div id="readyorder"></div><br/>
<!-- sidebar -->
<aside>
<nav>
<ul>
<li><a href="index.html">Main</a></li>
<li><a href="#">Change style</a></li>
</ul>
</nav>
</aside>
<!-- main -->
<section id="main">
<h1>Take your order!</h1><br/>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras condimentum tempus mi, maximus volutpat urna sollicitudin vitae. Vivamus rutrum mi sit amet commodo rutrum. Suspendisse potenti. Sed a ullamcorper eros. Maecenas dapibus erat mi, a egestas ipsum cursus volutpat. Aliquam posuere mi at consectetur convallis. Cras vitae ligula eget leo ultrices hendrerit nec sed ex. Morbi at ipsum rhoncus, dictum elit in, consectetur lorem. Aliquam suscipit diam sit amet mauris luctus, a egestas magna pharetra. Donec laoreet viverra risus nec fermentum. Maecenas gravida lectus vel ante commodo bibendum. Donec ac pellentesque mi. </p>
</section>
<!-- footer -->
<footer>
<p>Lorem Ipsum © 2017</p>
</footer>
</div>
</body>
</html>
答案 0 :(得分:0)
显而易见的是:
else if (authorId === 2) {
return secondAuthorSurname;
div.innerHTML = firstAuthorSurname.value + "...blabla";
}
return
以下的值不会被执行。然而,这几乎没有感觉,并且你提供的片段我们只能猜测。
var secondAuthorSurname;
if (authorId === 0) {
div.innerHTML = firstAuthorSurname.value + "...blabla";
secondAuthorSurname = "your desired return value";
} else if (authorId === 1) {
div.innerHTML = firstAuthorSurname.value + "...blabla";
secondAuthorSurname = "your desired return value";
} else if (authorId === 2) {
div.innerHTML = firstAuthorSurname.value + "...blabla";
secondAuthorSurname = "your desired return value";
}
return secondAuthorSurname;
var 也不应该在if block
中声明,它不是构建代码的好方法,而且可读性较差,许多人可能会期望它是undefined / ReferenceError(即使它不是&t;)。最重要的是宣布它。
在循环中(authorId = 3)
什么循环?
我做的最后一次修改:
首先if(){}else{}
不是循环,它是一个条件。循环可以运行多次,例如while(){}
。
Secundo,你误解var是如何工作的。声明var时,它在范围内声明。
如果你这样做:
var a = 2;
var b = 1;
function foo(){
var a = 3;
console.log(a); // 3
console.log(b); // 1
}
首先它试图获得foo的范围,它找到它,所以它打印3.然后它试图在foo范围内找到b,没有找到它并询问容器范围响应是的我有b,这里是1。
你可能知道这一点。但是你不知道的是:
function foo(){
if(true){
u = 1;
console.log(u);
}else{
var u = 5;
}
}
foo();
你觉得这里发生了什么?猜猜看,试着想一下幕后发生的事情。
以下是场景背后发生的事情:
function foo(){
var u;
if(true){
u = 1;
console.log(u);
}else{
u = 5;
}
}
foo();
在执行代码之前,var位于顶部。将变量声明放在循环之前而不是在循环之内是一种很好的做法,因为有些人可能认为它们没有被声明(就像在其他编程语言中一样)。
在这里说的是你的问题愚蠢:
var a = 0;
var b = 3;
if (authorId === 1) {
a = 1;
}else if (authorId === 2) {
// You are claiming that b changes because of the condition above
// this is strictly impossible
}
如果您输入了else块,那么您没有输入if,反之亦然。这就是它的用途。因此,如果块对你的else块有影响,就没办法了。
我说的一切你应该看到你的代码中有许多不适用的东西。
for(var authorId = 0 ; authorId < numberOfAuthors ; authorId++ ){
var authorName = document.getElementById("authorName"+authorId);
}
此处authorname将具有循环的最后一次迭代的值。因此,当authorId为0时,它将等于具有id&#34; authorInitials0&#34;的元素,然后下一次迭代它将被&#34; authorInitials1&#34;等等替换。
换句话说,您可以将其替换为具有相同效果的单行。
var authorName = document.getElementById("authorName"+ (numberOfAuthors -1 ));
这也很有意义:
var pageOther = document.getElementById("pageOther");
var pageOtherValue = pageOther.value;
if(pageOther.value!=""){
pageOtherValue = "-" + pageOther.value;
}else{
pageOtherValue = "";
}
深吸一口气,重新学习基础知识,否则你会不断陷入困境。也可以使用&#34;使用严格的&#34;在你的js文件的顶部。