2

これは非常に基本的なことですが、JavaScript には自信がありますが、苦労しているので、助けていただければ幸いです。

オブジェクトの 2 番目の子ノード内で発生する mouseDown イベントを使用して、for ループ内で関数を呼び出したいと考えています。イタリック体の部分は、これを行う私の試みです。ちなみに、swapFE 関数はまだ開発中です。もう 1 つ、イタリック体の部分を swapFE 関数に入れるとすべてが正常に機能しますが、for ループに入れるとすべてが表示されません。どうしてか分かりません。基本的に、マウスでフレーズをクリックすると、フランス語のフレーズを英語のフレーズに交換しようとしています。

function setUpTranslation() {
   var phrases = document.getElementsByTagName("p");
   var swapFE = document.getElementsByTagName("phrase");

   for (i = 0; i<phrases.length; i++) {
      phrases[i].number = i;
      phrases[i].childNodes[1].innerHTML = french[i];

      *phrases[i].childNodes[1].onMouseDown = swapFE;*

      }
  }


    /* see "function_swapFE(phrase,phrasenum);" below. The expression to call function swapFE
    is located underneath "function swapFE(e)" because although the directions said to put the
    "run swapFE" within the for loop it did not work properly that's why I put it beneath the 
    "function swapFE(e)".*/



function swapFE(e) {
    var phrase = eventSource(e);
    var phasenum = parseInt(1) = [1].innercontent.previousSibling;

    phrase.node.previousSibling.onmousedown=swapFE
    function_swapFE(e)(phrase,phrasenum);
   }

}

ご不明な点がございましたら、お知らせください。

ご協力いただきありがとうございます。

4

2 に答える 2

1

これにより、swapFE という名前のローカル変数が作成されます。

var swapFE = document.getElementsByTagName("phrase");

次に、これで、この var を mouseDown として設定します

フレーズ[i].childNodes[1].onMouseDown = swapFE;*

そうではありません... onMouseDown は、その名前のローカル変数ではなく、関数名に設定する必要があります。したがって、おそらくローカル変数の名前を別の名前に変更する必要があります。そうすることで、少なくとも解決に近づくことができます。

于 2010-01-27T19:15:53.510 に答える
0

あなたのソース コードで失敗している可能性があるものについて、いくつか推測することしかできません。まず、次のコードは、すべての<p>タグに少なくとも2 つの子要素があることを前提としています。

for (i = 0; i<phrases.length; i++) { 
    phrases[i].number = i; 
    phrases[i].childNodes[1].innerHTML = french[i]; 

    *phrases[i].childNodes[1].onMouseDown = swapFE;* 
} 

ページ上の<p>タグに子要素が 2 つ未満の場合、エラーがスローされ、スクリプトの実行が停止します。<p>これに対する最善の解決策は、探している要素を含む各タグに class 属性を追加することです。または、ステートメントを使用して 2 番目の子ノードの存在を確認することもできますif。または、両方を行うこともできます。

次に、すべてのイベントと同様onmousedownに、小文字で宣言する必要があります。設定onMouseDownはエラーをスローしませんが、イベント ハンドラーをアタッチする代わりに、要素にカスタム プロパティを作成します。

最後に、次のコード:

var swapFE = document.getElementsByTagName("phrase"); 

その関数のグローバル関数をローカルでオーバーライドし、swapFE代わりに変数に置き換えます。

これは私があなたのsetupTranslation関数を書く方法です:

function setUpTranslation() {     
    var phrases = document.getElementsByTagName("p");
    // rename the swapFE var as outlined below
    var swapFENodes = document.getElementsByTagName("phrase");

    var cNode;  // set up an empty variable that we use inside the loop
    for (i = 0; i<phrases.length; i++) {
        /* Check for the existence of the translationPhrase class 
           in the <p> tag and the set the cNode var to childNodes[1]
           and testing for its existence at the same time */
        if (cNode.className != "translationPhrase" 
             || !(cNode = phrases[i].childNodes[1]))
             continue; // skip to the next iteration

         phrases[i].number = i;
         cNode.innerHTML = french[i];     
         cNode.onmousedown = swapFE;  // Changed onMouseDown to onmousedown
    }     
}    
于 2010-01-27T19:16:15.700 に答える