0

2 つの配列と変数があります。項目を変数にプッシュし、2 回目のクリックでそれを配列に追加できます。ただし、その配列からアイテムを移動して変数に戻し、変数を別の配列に移動する別のボタンがあります。私のコードは最初のセクションで動作しますが、私の関数は 2 番目のセクションでロードされます。

機能していないように見えるのはこのセクションです

<INPUT type=button value="Back" onClick='txtPop.value = popBackStack();showStack(theList);pushForStack(curUrl);
showStack2(theList2);'>

コード全体は次のとおりです。

<SCRIPT>
    var backStack = new Array();
    var forStack = new Array();
    var curUrl = document.getElementById("txtPop");

    function pushStack(newVal) {
      backStack.push(curUrl);
      curUrl = newVal;
    }

    function pushForStack(newVal) {
      CurUrl = newVal;
      forstack.push(curUrl);
    }

    function popBackStack() {
      var popVal = backStack.pop();
      if (popVal == undefined) return "Nothing left!";
      else return popVal
    }

    function popForStack() {
      var popVal = forStack.pop();
      if (popVal == undefined) return "Enter a new URL";
      else return popVal;
    }

    function showStack(theSelect) {
      theSelect.options.length = 0;
      for (var i = 0; i < backStack.length; i++) {
        var theOption = new Option(backStack[i]);
        theSelect.options[theSelect.options.length] = theOption;
      }
    }

    function showStack2(theSelect) {
      theSelect.options.length = 0;
      for (var i = 0; i < forStack.length; i++) {
        var theOption = new Option(forStack[i]);
        theSelect.options[theSelect.options.length] = theOption;
      }
    }
 </SCRIPT>

<table width="104%" height="364" border="5" cellpadding="3" cellspacing="3">
<tr>
<th width="30%" height="78" scope="col"><p>
<INPUT type=button value="Back" onClick='txtPop.value =     popBackStack();showStack(theList);pushForStack(curUrl);
showStack2(theList2);'></p></th>
<th width="46%" scope="col"><p>
<center>
<INPUT type=text name=txtPush>
<INPUT type=button value="Push"   onClick='pushStack(txtPush.value);txtPush.value="";txtPop.value = curUrl;   showStack(theList);'>
</center>
</p></th>
<th width="24%" scope="col"><p><INPUT type=button value="Forward" onClick="txtPop.value      = popBackStack();showStack2(theList2);"></p></th>
</tr>
<tr>
<td><p><center>
<SELECT name="theList" size=12>
</SELECT>
</center></p></td>
<td><p><center><INPUT type=textki name=txtPop size=25></center></p></td>
<td><center>
<SELECT name="theList2" size=12>
</SELECT>
</center></td>
</tr>
</table>
4

1 に答える 1

0

コードに多くの問題があります

  1. その ID を持つ要素がないため、呼び出しdocument.getElementById('txtPop')は何も返さないはずです。そのnameの要素がありますが、idはありません。
  2. curUrlスタックにプッシュしようとしていますが、 curUrl(正しく初期化された場合) は値ではなく要素です...それがあなたがやろうとしていることだとは思いません。
  3. クリック ハンドラーは複雑すぎて、要素の属性に入れることができません。それらを独自の関数に入れ、関数名を使用してそれらをアタッチします...これを行うためのより良い方法については、イベント処理に関するいくつかのチュートリアルを参照してください (www.w3.org/wiki/Handling_events_with_JavaScript など)。w3schoolsのチュートリアルに従わないでください。彼らは悪いよりも悪いです。
于 2013-01-14T00:40:21.093 に答える