我需要保留前一个if语句中的值,然后在下一个if语句(authorId = 2)中打印另一个名称(但值相同)的前一个if语句中的值。

我的意思是我需要保留if语句(authorId === 1)中的值,然后在下一个if语句(authorId = 2)中将其打印为另一个值。
因此,我需要保留authorSurname.value(id = 1)并在if语句(authorId = 2)中将其打印为secondAuthor.value,因为在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>

最佳答案

一个明显的错误是:

 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;


另外,也不应该在if block中声明var,这不是构造代码的好方法,而且可读性差,许多人可能希望它是undefined / ReferenceError的(即使不是)。首先要声明它。


  在循环中(authorId = 3)


什么循环?

我所做的最后编辑:


1。您应该知道,您缺少一些基本概念,并且在您的代码中很清楚。


首先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范围内获取a,找到它,然后打印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为“ authorInitials0”的元素,然后在下一次迭代中将其替换为“ authorInitials1”,依此类推。

换句话说,您可以将其替换为一行,效果相同。

 var authorName = document.getElementById("authorName"+ (numberOfAuthors -1 ));


这也没有什么意义:

var pageOther = document.getElementById("pageOther");
var pageOtherValue =  pageOther.value;

if(pageOther.value!=""){
    pageOtherValue = "-" + pageOther.value;
}else{
    pageOtherValue = "";
}


深吸一口气,重新学习基础知识,否则您将不断陷入困境。还可以在js文件顶部使用“使用严格”。

关于javascript - 从先前的if语句中获取值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41437185/

10-12 12:31
查看更多