2013-06-29 5 views
0
Ev.DOMit = function (e) { 
    e = e ? e : window.event; // e IS passed when using attachEvent though ... 

    if (!e.target) { 
     e.target = e.srcElement; 
    } 

    if (!e.preventDefault) { 
     e.preventDefault = function() { 
      e.returnValue = false; 
      return false; 
     }; 
    } 

    return e; 
}; 

Ev.getTarget = function (e) { 
    e = Ev.DOMit(e); 
    var tgt = e.target; 
    if (tgt.nodeType !== 1) { 
     tgt = tgt.parentNode; 
    } 
    return tgt; 
}; 

Я видел выше кода из одного файла JSпытается понять некоторые JS коды с сайта

Вопросы:

1.

  e.returnValue = false; 
      return false; 

, поскольку у нас уже есть эта строка: e.returnValue = false; , почему мы должны иметь эту строку здесь: return false;?

2.

if (tgt.nodeType !== 1) { 
     tgt = tgt.parentNode; 
    } 

что это за линия?

ответ

3
  1. e.returnValue = false; устанавливает свойство returnValue аргумента функции. Метод return false; возвращает функцию со значением «false».

  2. Моя догадка за это - http://www.w3schools.com/dom/dom_nodetype.asp - функция устанавливает (возвращаемое значение) tgt в parentNode для любого узла, за исключением ELEMENT_NODE

+2

W3schools - ужасный ресурс. MDN документирует это точно так же, и намного надежнее. –

+0

@JanDvorak - предоставить эквивалентную ссылку –

+0

@TobyAllen найти возможные значения легко: https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType; вы даже можете увидеть, какой из этих типов узлов устарел (W3S скрывает тот факт, что некоторые из них). Для nodeValues ​​см. Https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeValue. Одна вещь, которую я не нашел, - это удобная таблица резюме каждого типа, но это потому, что MDN - это ссылочный сайт, а не сайт учебника. И, честно говоря, эти сводки ничего мне не говорят - они выглядят довольно автогенерированными. –

0

Я не уверен, что вопрос 1, но у меня есть некоторый вид на вопрос 2.

«NODETYPE» представляют собой «целое» значение узла, элемента типа «р», Разд

будет иметь тип узла 1 «это текст» будет иметь тип узла «3» ,

код:

  if (tgt.nodeType !== 1) { 
      tgt = tgt.parentNode; 
      } 

Я предполагаю, что кодировщик хочет обработать событие на "элемент", как "р, Div" метки.

Пример: Пусть говорят, что мы следующий код

  <p>Text in p</p> 

Так что, если какое-то событие происходит на текст «Текст в р» внутри «р», то и кодировщик хотите получить целевой элемент для события как «p» не текст внутри него «Текст в p». Теперь подумайте о событии текстового узла «DOMCharacterDataModified», когда это событие запустит целевой объект , элемент должен быть «Text in p», но наш кодер хочет, чтобы целевой элемент был «тегом p».

Опять же это вид мой может конкретно ответить на вопрос

Одним из полезных ссылок вы можете, как читать

https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType

Благодарности

0
  1. Не нужно вообще ,

  2. Удостоверьтесь, что tgt всегда является ElementNode, даже если событие срабатывает на содержащемся текстовом узле.

+0

(1) не требуется только в данном контексте. Если эта функция вызывается в другом месте, это может иметь значение. – zaitsman

+0

@zaitsman В соответствии со стандартами метод 'preventDefault' ничего не возвращает. Таким образом, возвращение «false» в IE означает создание полиполнения с неожиданным поведением. – user123444555621

Смежные вопросы