Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   простой вопрос по preventDefault (https://javascript.ru/forum/misc/25806-prostojj-vopros-po-preventdefault.html)

mue 16.02.2012 00:27

простой вопрос по preventDefault
 
помогите понять, почем такой скрипт не срабатывает
<a href="http://google.com" id="inner" onclick="myFunc()">внутренний</a>

<script type="text/javascript">
  function myFunc(e){
    e.preventDefault();
  }
  
</script>

Shaci 16.02.2012 00:47

.....
Цитата:

Сообщение от mue (Сообщение 157742)
помогите понять, почем такой скрипт не срабатывает
<a href="http://google.com" id="inner" onclick="myFunc()">внутренний</a>

<script type="text/javascript">
  function myFunc(e){
alert(e);//undefined

    e.preventDefault();
  }
  
</script>


mue 16.02.2012 01:01

получается остановить действия браузера по умолчанию, я могу двумя способами
var a = document.getElementById('inner');
  a.onclick = function (e){
    e.preventDefault();
  }

и
var a = document.getElementById('inner');
    function stop(e){
    e.preventDefault();
  }
a.addEventListener('click', stop, false)

Octane 16.02.2012 01:09

Не в этом дело
Цитата:

onclick="myFunc()"
myFunc не является listener'ом, здесь создается анонимная функция, которая в свою очередь получает объект события и вызывает myFunc:
…onclick = function (event) {
    myFunc();
}

а не
…onclick = myFunc;

вам нужно просто педеать событие в функцию
Код:

onclick="myFunc(event)"
Но вообще лучше не писать JavaScript в тегах, а пользоваться addEventListener

mue 16.02.2012 01:21

Цитата:

Но вообще лучше не писать JavaScript в тегах, а пользоваться addEventListener
понимаю, хочу разобраться чисто для себя

в таком случае
…onclick = function (event) {
    myFunc();
}

при вызове myFunc() она поищет у себя объект event, не найдет, и пойдет выше ... не пойму, почему так не происходит ?

Mахmахmахimus 16.02.2012 01:25

вот как надо
…onclick = function (event) {
    myFunc(event);
}

mue 16.02.2012 01:27

Цитата:

вот как надо
как надо я понял
я не пойму почему myFunc не берет объект события из верхней функции, которая собственно и вызывает саму myFunc

B@rmaley.e><e 16.02.2012 01:32

Цитата:

Сообщение от mue
при вызове myFunc() она поищет у себя объект event, не найдет, и пойдет выше ... не пойму, почему так не происходит ?

Потому что при разрешении имени переменной внутри myFunc "восхождение" наверх будет происходить от точки определения функция, а не точки вызова.

Octane 16.02.2012 01:33

А JavaScript телепатические способности не заложены, откуда myFunc может узнать, какой агрумент забрать?)

mue 16.02.2012 01:51

я понял, спасибо за ответы
думал что
function wrap(a){
  (function myFunc(){
    alert(a);
  })()
}
wrap('qwerty');

одно и тоже что и
function wrap(a){
    myFunc();
}
function myFunc(){
    alert(a);
}
wrap('qwerty');


Часовой пояс GMT +3, время: 08:51.