2017-03-21 4 views
1

以下の宿題の中で、私はこの章から考えることができるすべてを行っているが、全く機能しないだろう。私が何かを見逃しているように感じるか、どこかでうんざりしている。ネストされたリスト 宿題コードに「定義されていません」というエラーが表示されるのはなぜですか?

"Using the id property of the list item experiencing the mousedown event, extract the index number with the parseInt() function"

が、私がやったことは正しいとは思えない。

命令の1つは述べています。

window.onload = setup; 

function setup() { 
    var questions = document.querySelectorAll('ol li'); 

    for (var i = 0; i < questions.length; i++) { 
     questions[i].id = i + "phrase"; 
     questions[i].onmousedown = showEnglish(questions[i]); 
     questions[i].onmouseup = showFrench(questions[i]); 
     questions[i].style.cursor = "pointer"; 
    } 
} 

function showEnglish() { 
    var phraseNumber = parseInt(questions[i].id); 

    phraseNumber.innerHTML = english[phraseNumber]; 
    phraseNumber.style.font = "italic"; 
    phraseNumber.style.color = "rgb(191, 22, 31)"; 
} 

function showFrench() { 
    var phraseNumber = parseInt(questions[i].id); 

    phraseNumber.innerHTML = french[phraseNumber]; 
    phraseNumber.style.fontStyle = ""; 
    phraseNumber.style.color = ""; 
} 

私はquestionsはそれが重要な場合は、私がメモ帳++で私のコーディングをやっているquestions[i].onmousedown = showEnglish(questions[i]);
var phraseNumber = parseInt(questions[i].id);

で定義されていないというエラーを取得します。

のHTMLセグメント:

<ol> 
      <li>Cet h&#244;tel n'est pas loin de la Tour Eiffel.</li> 
      <li>A quelle heure arrive le train?</li> 
      <li>Nous attendons l'autobus depuis une demi-heure.</li> 
      <li>Ce repas est d&#233;licieux.</li> 
      <li>Quel jour va-t-elle arriver?</li> 
      <li>Nous avons onze minutes avant le d&#233;part du train!</li> 
      <li>Habiter dans un pays &#233;tranger est une bonne exp&#233;rience.</li> 
      <li>Excusez-moi! Je suis en retard!</li> 
      <li>Est-ce que ce taxi est libre?</li> 
      <li>Faites attention quand vous descendez l'escalier.</li> 
     </ol> 
+0

showFrench機能は、質問の変数は '' document.querySelectorAll(「オール李」)で、あなたのHTMLのような何ですか? – hackerrdave

+4

'questions [i] .onmousedown = showEnglish(questions [i]);'関数をハンドラとして割り当てるのではなく、呼び出しています。代わりに 'questions [i] .onmousedown = showEnglish;'を実行し、ハンドラ内でクリックされた要素を参照するために 'questions [i]'の代わりに 'this'を使用します。 'showFrench'関数と同じです –

+0

@hackerrdaveメインのポストをhtmlセグメントで更新しました。 – Fuey500

答えて

1

これは、あなたが適切にイベントハンドラを割り当てる方法ではありません。

for (var i = 0; i < questions.length; i++) { 
    .... 
    questions[i].onmousedown = showEnglish(questions[i]); 
    ... 
} 

代わりに、このように変更します。

questions[i].onmousedown = showEnglish; 

あなたが機能を割り当てていますイベントハンドラとして、特定の瞬間に呼び出さないようにします。括弧fn()を追加すると、関数を呼び出すことに注意してください。

これを反映するために、showEnglish()関数を更新する必要があります。

function showEnglish() { 
    var phraseNumber = parseInt(this.id); // Here 
    ... 
} 

私は要素を参照するためにthisキーワードを使用しました。

同じプロセスがonmouseupのために行くと

+0

ありがとうございました! – Fuey500

関連する問題