| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: для новичков > setTimeout |
| Автор: chertoss 29.9.2008, 16:42 | ||
| Здравствуйте все!! возникла такая проблема, есть код
почему не работает? разве нельзя передавать параметры в вункцию таким образом? |
| Автор: Dima 2015 29.9.2008, 17:01 | ||||
chertoss, передавать то параметры можно. Но если написать вот так:
Мы увидим что m есть object Window. Я так понимаю что в данном случае this, который тут onclick="setTimeout('hide(this)', 200);" уже не указывает на элемент div, а указывает на объект Window, к которому относится метод setTimeout. Хотя это только мои догадки... Просто если ты напишешь <div onclick="alert(this)">asdgfh</div> то увидишь, что алерт выведет HTMLDivElement, есть разница? Что делать.. ну можно лишь посоветовать setTimeout засунуть внутрь ф-ции hide, и вызывать так: <div onclick="hide(this);">asdgfh</div> Хотя я полагаю вопрос то как раз в том как передать элемент, на который кликаем в ф-цию setTimeout. Ну если через this никак, то можно только по id посоветовать:
|
| Автор: chertoss 29.9.2008, 17:15 | ||||
можно пример, не совсем понимаю, как это должно выглядеть на практике
не будет id, нужно как то через this передавать |
| Автор: Dima 2015 29.9.2008, 17:30 | ||
chertoss, мм.. чтото с ходу не получилось, имел в виду это:
Но это не работает, по странной причине - m видит как [object HTMLDivElement].style.display = "none"... Надо както додумывать как объект в setTimeout передать, пока чтото не додумывается, может кто поумнее подскажет... |
| Автор: bars80080 29.9.2008, 17:39 | ||
|
| Автор: Dima 2015 29.9.2008, 17:45 | ||
chertoss, разобрался. Будет работать вот так:
Смотрел только в ФФ, но надеюсь тут не должно быть с другими бразуерами проблем. Признаюсь я смутно понимаю в чем тут дело, могу лишь вилами по воде водить... но я понимаю так: запуская setTimeout мы должны в него объект передать, а переменная m внутри ф-ции div_hide() локальная, и поэтому внутри setTimeout уже не видна. Поэтому создавая глобальную переменную el и записывая в нее объект (this, который суть div на который мы кликаем) мы делаем ее видимой во всем коде... Мне конечно это кажется кривоватым, но это все что удалось придумать.. :( |
| Автор: chertoss 29.9.2008, 17:48 |
| bars80080, твой пример не работает Добавлено через 2 минуты и 37 секунд Dima 2015, здорово, хотя и правда странно как то ну надеюсь это именно то, что мне нужно, и далее задача решиться.. щас уже сил проверять нет |
| Автор: bars80080 29.9.2008, 20:38 |
значит неправильно используешь. |
| Автор: Dima 2015 29.9.2008, 23:28 | ||
bars80080, слушай дружище, может ты сам прольешь тогда свет на то как надо было использовать твой метод? А то вот я чего-то пытаюсь, тоже никак не выходит... Ну начнем с того что там у тебя видимо скобка лишняя в конце фигурная, но я вот так пытался:
В m попадает object window, и соотв. ошибка m.style is undefined А ты то что имел в виду? |
| Автор: ksnk 30.9.2008, 08:00 | ||
работает это по той-же магической причине, что и пример Dima 2015, только , imho, без лишнего eval'a... |
| Автор: chertoss 30.9.2008, 09:34 |
| даа.. бывает же)) казалось бы простые вещи, а вот оно как получается.. в общем спасибо всем, кто помог (Dima 2015, bars80080, ksnk).. задача решена |
| Автор: Alexey91 5.9.2010, 10:35 |
| setTimeout(function(){chg_img(delay_clk);},delay_clk); почему, когда я пишу так в функцию параметр передается а если писать setTimeout(chg_img(delay_clk),delay_clk); то ничего не передается ?? |
| Автор: Alexey91 5.9.2010, 14:50 |
| Bars, я как раз хотел создать отдельную тему, но подумал, что лучше будет, если в этой Хорошо, в следующий раз буду создавать отдельную тему.. СПАСИБО, БАРС |