Как написать событие мыши в JavaScript? - PullRequest
2 голосов
/ 27 января 2010

Это очень простой, я уверен, что JavaScript, но мне трудно, поэтому любая помощь будет оценена.

Я хочу вызвать функцию внутри цикла for, используя событие mouseDown, происходящее во втором дочернем узле объекта. Часть, выделенная курсивом, - моя попытка сделать это. Кстати, функция 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);
   }

}

Если у вас есть вопросы, дайте мне знать.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 27 января 2010

При этом вы создаете локальную переменную с именем swapFE;

var swapFE = document.getElementsByTagName ( "фраза");

Затем вы устанавливаете эту переменную как mouseDown

фразы [i] .childNodes [1] .onMouseDown = swapFE; *

Это не правильно ... onMouseDown должно быть установлено на имя функции, а не на локальную переменную с таким именем. Поэтому вам, вероятно, следует переименовать локальный var в другое. Это, по крайней мере, приблизит вас к решению.

0 голосов
/ 27 января 2010

Я могу только сделать несколько предположений о том, что может не сработать с вашим исходным кодом. Во-первых, следующий код предполагает, что все теги <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
    }     
}    
...