Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.02.2012, 00:27
mue mue вне форума
Интересующийся
Отправить личное сообщение для mue Посмотреть профиль Найти все сообщения от mue
 
Регистрация: 15.11.2011
Сообщений: 24

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

<script type="text/javascript">
  function myFunc(e){
    e.preventDefault();
  }
  
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 16.02.2012, 00:47
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

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

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

    e.preventDefault();
  }
  
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2012, 01:01
mue mue вне форума
Интересующийся
Отправить личное сообщение для mue Посмотреть профиль Найти все сообщения от mue
 
Регистрация: 15.11.2011
Сообщений: 24

получается остановить действия браузера по умолчанию, я могу двумя способами
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)
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2012, 01:09
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

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

а не
…onclick = myFunc;

вам нужно просто педеать событие в функцию
Код:
onclick="myFunc(event)"
Но вообще лучше не писать JavaScript в тегах, а пользоваться addEventListener

Последний раз редактировалось Octane, 16.02.2012 в 01:12.
Ответить с цитированием
  #5 (permalink)  
Старый 16.02.2012, 01:21
mue mue вне форума
Интересующийся
Отправить личное сообщение для mue Посмотреть профиль Найти все сообщения от mue
 
Регистрация: 15.11.2011
Сообщений: 24

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

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

при вызове myFunc() она поищет у себя объект event, не найдет, и пойдет выше ... не пойму, почему так не происходит ?
Ответить с цитированием
  #6 (permalink)  
Старый 16.02.2012, 01:25
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

вот как надо
…onclick = function (event) {
    myFunc(event);
}
Ответить с цитированием
  #7 (permalink)  
Старый 16.02.2012, 01:27
mue mue вне форума
Интересующийся
Отправить личное сообщение для mue Посмотреть профиль Найти все сообщения от mue
 
Регистрация: 15.11.2011
Сообщений: 24

Цитата:
вот как надо
как надо я понял
я не пойму почему myFunc не берет объект события из верхней функции, которая собственно и вызывает саму myFunc
Ответить с цитированием
  #8 (permalink)  
Старый 16.02.2012, 01:32
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от mue
при вызове myFunc() она поищет у себя объект event, не найдет, и пойдет выше ... не пойму, почему так не происходит ?
Потому что при разрешении имени переменной внутри myFunc "восхождение" наверх будет происходить от точки определения функция, а не точки вызова.
Ответить с цитированием
  #9 (permalink)  
Старый 16.02.2012, 01:33
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

А JavaScript телепатические способности не заложены, откуда myFunc может узнать, какой агрумент забрать?)
Ответить с цитированием
  #10 (permalink)  
Старый 16.02.2012, 01:51
mue mue вне форума
Интересующийся
Отправить личное сообщение для mue Посмотреть профиль Найти все сообщения от mue
 
Регистрация: 15.11.2011
Сообщений: 24

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

одно и тоже что и
function wrap(a){
    myFunc();
}
function myFunc(){
    alert(a);
}
wrap('qwerty');
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простой вопрос yuri.gordeev Общие вопросы Javascript 5 10.02.2012 14:31
Добавление класса или id к ссылке. Простой вопрос: Как? Mrjoey Элементы интерфейса 1 18.05.2011 16:42
Простой вопрос - как запросить страницу НЕ ИЗ кэша kefi AJAX и COMET 1 20.09.2010 15:26
Простой вопрос onClick alex2001 Элементы интерфейса 3 11.07.2010 18:19
Простой вопрос по jquery Grienders jQuery 1 28.01.2010 14:52