Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Какая разница между анонимной функцией и той которая имеет имя? (https://javascript.ru/forum/jquery/44988-kakaya-raznica-mezhdu-anonimnojj-funkciejj-i-tojj-kotoraya-imeet-imya.html)

koderman 11.02.2014 17:00

Ага. Лучше понял.

-----------

Цитата:

Сообщение от danik.js (Сообщение 297070)

[JS]$.protototype.click = function(callback) {
// callback ссылается на нашу анонимную функцию
// и какая хрен разница если скажем вместо этото у нас тут будет написано
// callback = function() {};

Тоесть function(callback) {} то же самое что и callback = function() {}; ??
Я думал параметр переданный в анонимную функцию возвращает события браузера. Например preventDefault
function(callback) { ("#object").callback.preventDefault;}

А где можно про $.post почитать? Трудновато почемуто находить описания комманд, методов из яваскрипта.

danik.js 11.02.2014 18:24

Цитата:

Сообщение от koderman
Тоесть function(callback) {} то же самое что и callback = function() {}; ??

Да нет же.

Я хотел сказать что вот это:
$.protototype.click = function(callback) {
    callback();
};

$().click(function() { alert('abc') });



технически мало чем отличается от:

$.protototype.click = function() {
    var callback = function() { alert('abc') };
    callback();
};

$().click();


Вся лишь разница что в первом случае мы пробрасываем функцию как параметр, а во втором не делаем этого. То есть вся разница только в использовании параметра вместо локальной переменной. А параметр - это тоже переменная. То есть это вообще не затрагивает темы анонимной функции. Вместо функции можно поставить любое значение, например объект.

Если ты посмотришь, то эти два примера идентичны твоим примерам. Но ты пыхтел что мол они пиздец как разные. А тут я показал что они (с точки зрения обсуждаемой темы) одинаковы на все 100%! То есть ты пытался найти разницу там, где ее нет :)

Цитата:

Сообщение от koderman
Я думал параметр переданный в анонимную функцию возвращает события браузера

Так и есть (ясен пень, тут ни анонимность, ни тип функции роли не играет)

Цитата:

Сообщение от koderman
А где можно про $.post почитать?

Например на api.jquery.com :)

koderman 11.02.2014 20:38

Что не правильно в коде?

Когда кликаю на картинку с идентификатором #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")      );  
	
	
	
	
	});


Вставляется первая картинка из списка. При дальнейших кликах ничего не происходит.
Не могу цикл сделать.

danik.js 11.02.2014 20:58

koderman, ты вобще шнягу пишешь. Во-первых, задумайся: раз ты хочешь постепенно переключать картинки, то тебе нужно где-то хранить счетчик, чтобы при клике его увеличивать и менять картинку в соответствии с его значением. Счетчиком может быть к примеру глобальная переменная.

koderman 11.02.2014 21:04

Я слышал что метод each() счётчик делает.

Сейчас попробую.

Надо наверное было this применить, но в глобальную переменную засунуть.

koderman 11.02.2014 22:18

Я понял в чём проблема, но не могу её решить.
Я не могу занести в глобальную переменную параметр атрибута src.

var newi  =  $("img").each(function () {$(this).attr("src")});


Почему эта строка возвращает элемент массива

var newo = $("#eto img").attr("src");


А эта не возвращает?

var newo = $("#eto img").attr($(this).attr("src"));


Это ведь одно и тоже почти.

danik.js 11.02.2014 23:08

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;
});

koderman 11.02.2014 23:24

Работает. Но я в jquery разобраться хочу.
И ещё разница в том что в яваскрипте возвращаются номера массива, а в Jquery возвращаются ссылки на файл.
Зачем на велосипеде ездить если можно на самолёте.


Работает. Но я в jquery разобраться хочу.
И ещё разница в том что в яваскрипте возвращаются номера массива, а в Jquery возвращаются ссылки на файл.
Зачем на велосипеде ездить если можно на самолёте.

Темболее что вот так работает

$("#eto img").click(function(){$("#hier img").attr("src" , $(this).attr("src"))});
(Когда кликаю на картинку, эта картинка появляется там где я хочу. Это легче организовать, так как можно использовать слово this которое возвращает адрес куда щёлкнула мышь).

Тоесть в обратном порядке. И это хороший код.
А как я хочу почемуто не получется.

koderman 12.02.2014 00:54

Этот код делает то что я хочу, но только один раз

$("#hier img").click(function(){$("#hier img").attr("src" , $("#eto img").attr("src"))});

Vlasenko Fedor 12.02.2014 01:09

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>

добавил картинки, кликать по большой


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