Несколько вопросов по JQUERY.
1. Какая разница между анонимной функцией и той которая имеет имя?
2. Можно в Jguery применять все методы и свойства Яваскрипта? |
1. к именной функции ты можешь обратится в другом участке кода по имени
2. Да. Jguery - фреймворк написанный на JavaScript |
Анонимная функция исполняется без её вызова? То есть анонимная функция исполняется когда она была написана.
А функцию с названием нужно писать в том месте где она должна выполниться? Вот анонимная. Написали, исполнилась function(){ var q = 11; } Вот с названием. Она не выполнится пока не вызовем её kode();. function kode(){ var q = 11; } |
alert(kode()); // эта строка не выполнится myfunc - не определена //alert(myfunc()); function kode() { return 'YES'; } var myfunc = function () { return 'Hi'; } //а здесь myfunc - уже определена alert(myfunc()); var a; (function goodbay() { alert('Goodbay'); a = 10; }()); alert(a):haha: |
Это понятно. Но спасибо.
Вопрос в другом был. Отличия в выполнении анонимных функций и названных функций. |
Цитата:
Функция-объявление выглядит так: function fn() { } // точка с запятой не нужна Она может быть вызвана до (!) ее объявления. Она не может быть анонимной. Функция-выражение используется для callback-ов, для незамедлительного вызова и т.д. Она может быть анонимной. А может и не быть таковой. Цитата:
Анонимность функции никак не влияет на ее "исполнение". Анонимность птосто означает что у функции нет имени. А следовательно, единственный вариант как-то ее использовать - это сделать что-то с ссылкой на нее. То есть это либо сразу же вызвать функцию: (function(){})(); // скобки подсказывают интерптератору, что наша функция является функцией-выражением Либо присвоить ссылку в переменную: var fn = function() {}; // Да да, это анонимная функция! Либо передать параметром в вызов другой функции: $.post('url', function(){}); Но все эти вещи можно делать и с не-анонимной функцией: (function fn(){ alert(typeof fn) })(); var fn = function fn() {}; //(IE старых версий колбаснет от такого кода) $.post('url', function fn(){}); |
Вы решительно меня не понимаете.
$(`#object`).click(function(){ alert('Text')}); Вот написалась АНОНИМНАЯ функция и ТУТ ЖЕ она исполнилась. Кючевые слова АНОНИМНАЯ и ТУТ ЖЕ. Вот функция с названием НАПИСАЛАСЬ var ok = function funkciya(){ alert('123'); } НО ИСПОЛНИЛАСЬ только ТУТ когда эту функцию ВЫЗВАЛИ. funkciya(); |
Цитата:
$(`#object`).click(function(){ alert('Text')}()); Цитата:
Цитата:
Цитата:
|
Вы проверьте код. Я проверил.
Мой вариант -правильный. $("#object").click(function(){ alert("Text")}); Происходит событие нажатия кнопки мыши и вылазит окошко алерта. Ну да. Тут команда .click запускает функцию, поэтому скобки не нужны? Ага. Понял. Для моментального исполнения функции (в том месте где эта функция была написана) нужно дописывать эти скобки, а если в другом месте АНОНИМНУЮ функцию выполнить хотим, то её надо переменной присвоить. Так бы и сказали. Столько букв написали пффф. Это я и хотел сказать в третьем сообщении http://javascript.ru/forum/jquery/44...tml#post296821 Спасибо что про скобки сказали. |
Цитата:
Цитата:
Просто в первом случае ссылка на функцию передается как параметр вызываемой функции click(), а во втором случае - присваивается переменной ok. И на самом деле разницы практически никакой! Ибо параметр - это тоже переменная. $.protototype.click = function(callback) { // callback ссылается на нашу анонимную функцию // и какая хрен разница если скажем вместо этото у нас тут будет написано // callback = function() {}; this.get(0).addEventListener('click', callback); }; $(el).click(function(){}); Цитата:
Вот так - да: ok(). А вот имя funkciya будет видно только внутри самой функции (скажем, для рекурсивного вызова). Но об этом я не писал выше. Короче, перечитай весь тред еще раз, походу ты не все вкурил. |
Ага. Лучше понял.
----------- Цитата:
Я думал параметр переданный в анонимную функцию возвращает события браузера. Например preventDefault function(callback) { ("#object").callback.preventDefault;} А где можно про $.post почитать? Трудновато почемуто находить описания комманд, методов из яваскрипта. |
Цитата:
Я хотел сказать что вот это: $.protototype.click = function(callback) { callback(); }; $().click(function() { alert('abc') }); технически мало чем отличается от: $.protototype.click = function() { var callback = function() { alert('abc') }; callback(); }; $().click(); Вся лишь разница что в первом случае мы пробрасываем функцию как параметр, а во втором не делаем этого. То есть вся разница только в использовании параметра вместо локальной переменной. А параметр - это тоже переменная. То есть это вообще не затрагивает темы анонимной функции. Вместо функции можно поставить любое значение, например объект. Если ты посмотришь, то эти два примера идентичны твоим примерам. Но ты пыхтел что мол они пиздец как разные. А тут я показал что они (с точки зрения обсуждаемой темы) одинаковы на все 100%! То есть ты пытался найти разницу там, где ее нет :) Цитата:
Цитата:
|
Что не правильно в коде?
Когда кликаю на картинку с идентификатором #hier , у неё должен меняться параметр src на адрес другой картинки из массива с идентификатором #eto (картинок там много.) И так при каждом клике на месте #hier должны появляться картинки из #eto. $("#hier img").click(function() { $("#hier img ").attr("src" , $("#eto img").each(function(){ $("#eto img").attr("src")}) ); }); Проблема ТОЛЬКО В ЭТОЙ СТРОЧКЕ где идёт подмена методом attr .attr("src" , $("#eto img").each Вроде передал сюда $("#eto img") адрес текущего параметра src. ---------------------- Без функции, вот так $("#hier img").click(function() { $("#hier img ").attr("src" , $("#eto img").attr("src") ); }); Вставляется первая картинка из списка. При дальнейших кликах ничего не происходит. Не могу цикл сделать. |
koderman, ты вобще шнягу пишешь. Во-первых, задумайся: раз ты хочешь постепенно переключать картинки, то тебе нужно где-то хранить счетчик, чтобы при клике его увеличивать и менять картинку в соответствии с его значением. Счетчиком может быть к примеру глобальная переменная.
|
Я слышал что метод each() счётчик делает.
Сейчас попробую. Надо наверное было this применить, но в глобальную переменную засунуть. |
Я понял в чём проблема, но не могу её решить.
Я не могу занести в глобальную переменную параметр атрибута src. var newi = $("img").each(function () {$(this).attr("src")}); Почему эта строка возвращает элемент массива var newo = $("#eto img").attr("src"); А эта не возвращает? var newo = $("#eto img").attr($(this).attr("src")); Это ведь одно и тоже почти. |
koderman, че ты за чепуху пишешь? Забудь про свою jquery, она тебе весь мозг отравила ))
var $images = $("#eto img"); var counter = 0; $("#hier img").click(function() { if (counter == $images.length - 1) counter = 0; else counter += 1; this.src = $images[counter].src; }); |
Работает. Но я в jquery разобраться хочу.
И ещё разница в том что в яваскрипте возвращаются номера массива, а в Jquery возвращаются ссылки на файл. Зачем на велосипеде ездить если можно на самолёте. Работает. Но я в jquery разобраться хочу. И ещё разница в том что в яваскрипте возвращаются номера массива, а в Jquery возвращаются ссылки на файл. Зачем на велосипеде ездить если можно на самолёте. Темболее что вот так работает $("#eto img").click(function(){$("#hier img").attr("src" , $(this).attr("src"))}); (Когда кликаю на картинку, эта картинка появляется там где я хочу. Это легче организовать, так как можно использовать слово this которое возвращает адрес куда щёлкнула мышь). Тоесть в обратном порядке. И это хороший код. А как я хочу почемуто не получется. |
Этот код делает то что я хочу, но только один раз
$("#hier img").click(function(){$("#hier img").attr("src" , $("#eto img").attr("src"))}); |
koderman,
разделяйте логику, пишите код так, чтобы часть его можно использовать в дальнейшем <style> #hier img { width:40px; height: 40px; } </style> <div id="hier"> <img src="http://javascript.ru/forum/images/smilies/help.gif"> </div> <div id="eto"> <img src="http://javascript.ru/forum/images/smilies/smile.gif"> <img src="http://javascript.ru/forum/images/smilies/haha.gif"> <img src="http://javascript.ru/forum/images/smilies/thank_you2.gif"> <img src="http://javascript.ru/forum/images/smilies/wink.gif"> <img src="http://javascript.ru/forum/images/smilies/blink.gif"> </div> <script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.js'></script> <script> function next(arr) { var max = arr.length - 1, i = -1; return function () { i = i < max ? i + 1 : 0; return arr[i]; }; } var images = $("#eto img"); var image = next(images); $("#hier img").click(function () { this.src = image().src; }); </script> добавил картинки, кликать по большой |
Я подобрался к проблеме вплотную. Теперь у меня один вопрос всего лишь.
Как передать переменной массив ? Вот так всё работает, $("#eto img").each(function(){ $(this).attr('src'); alert($(this).attr('src')); }); а если передаю это всё дело переменной. Так: var newi = $("#eto img").each(function(){ $(this).attr('src'); alert($(this).attr('src')); }); То переменная newi не возвращает адреса которые есть в массиве. То есть эту переменную потом нельзя использовать в качестве ссылки на этот код. Цитата:
|
koderman,
Цитата:
Код который я показал смотрел? Разобрался, понял назначение функции function next? |
---
|
Функция next это счётчик и преобразователь вида ссылки.
Функции next отдали $("#eto img") в качестве параметра. Эта функция в итоге возвращает адрес такого вида для доступа к массиву с числом в квадратных скобках. $("#eto img")[i] Потом плюсуется .src и получается $("#eto img")[i].src --------------------------------- Пару вопросиков есть. 1. Что здесь делается? i = i i приравнять к i?? зачем. 2. Что это? : 0; 3. Зачем знак доллара перед переменной? var $images (это из кода danik.js) И в функции ещё что то было, вы исправили. log.console Что то типа этого. Класно придумано. Здорово. danik.js тоже почти такой же код писал. Но я буду ещё дальше с помощью чистого Jquery делать пытаться. Почти уже получилось. Только счётчик остался. |
Цитата:
|
1,2 i = i < max ? i + 1 : 0;
использование тернарного оператора http://learn.javascript.ru/ifelse i = /* если */ i < max ? /* то равно */ i+1 : /* иначе */ 0; // эквивалентно if( i < max){ i = i + 1; } else { i = 0; } koderman, на форуме есть хороший учебник. Начните лучше с него http://learn.javascript.ru/ console.log('Hi'); // вывод отладочных сообщений в консоль броузера. Обычно открыть консоль F12 |
Да ладно. Знал я про тернарные операторы, подзабыл некоторые параметры. Вспомнил.))
Функцию ведь расшифровал. Я смотрю сейчас видео уроки. Я посмотрел несколько десятков видео часов и почти не было вопросов у меня по всему материалу. Это как бы остатки того чего или не было в видео или ещё что то и тогда начну уже писать гумнокоды.)) Так что значит i=i (как я вижу i приравняли к i) Зачем знак доллара перед переменной? var $images (это из кода danik.js) |
Господа, фиг с ним с другими вопросами. Как быть с первым?
Как на чистом jquery замутить цикл? Вот так Только в обратном порядке. <style> #hier img { width:40px; height: 40px; } </style> <div id="hier"> <img src="http://javascript.ru/forum/images/smilies/help.gif"> </div> <div id="eto"> <img src="http://javascript.ru/forum/images/smilies/smile.gif"> <img src="http://javascript.ru/forum/images/smilies/haha.gif"> <img src="http://javascript.ru/forum/images/smilies/thank_you2.gif"> <img src="http://javascript.ru/forum/images/smilies/wink.gif"> <img src="http://javascript.ru/forum/images/smilies/blink.gif"> </div> <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js'></script> <script> $(document ).ready(function() { $("#eto img").click(function(){$("#hier img").attr("src" , $(this).attr("src"))}); }); </script> Как предыдущие коды на яваскрипт работали. Или это нерешаемая задача на Jquery ? Только здесь надо по нижним картинкам клацать. И заметьте насколько код меньше чем на яваскрипте. Как в обратном порядке сделать на Jquery? Пробовал функцию подствлять в метод attr, но этот метод видимо не принимает функции. |
Вы наверное подсказываете только тем кто уже полностью знает яваскрипт?)))
Моё изучение Jquery остановилось за всё время изучения Jquery, с того момента как я обратился на форум. |
<style> #hier{ width:40px; height: 40px; } </style> <img id="hier" src="http://javascript.ru/forum/images/smilies/help.gif"> <div id="eto"> <img src="http://javascript.ru/forum/images/smilies/smile.gif"> <img src="http://javascript.ru/forum/images/smilies/haha.gif"> <img src="http://javascript.ru/forum/images/smilies/thank_you2.gif"> <img src="http://javascript.ru/forum/images/smilies/wink.gif"> <img src="http://javascript.ru/forum/images/smilies/blink.gif"> </div> <script> eto.onclick = function(e){ var el = e ? e.target : window.event.srcElement; if (el.tagName != "IMG") return; hier.src = el.src; }; </script> вот зачем здесь jQuery? тебе показывают решения которые быстрее и не требуют дополнительных библиотек |
Цитата:
В качестве лечения назначаю курс изучения JavaScript. |
Цитата:
|
Часовой пояс GMT +3, время: 06:03. |