2

这对 JavaScript 来说是非常基本的,但我很难过,所以任何帮助都将不胜感激。

我想使用对象的第二个子节点中发生的 mouseDown 事件在 for 循环中调用一个函数。斜体部分是我的尝试。顺便说一句,swapFE 功能仍在进行中。还有一件事是,当我将斜体部分放在 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 应该设置为函数名称,而不是该名称的局部变量。因此,您可能应该将本地 var 重命名为其他名称。这至少会让你更接近解决方案。

于 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>包含您要查找的元素的标签添加一个类属性。或者,您可以使用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 回答