• Как получить результат работы ф-ии?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Для решения таких задач предназначен Promise.
    Это могло бы выглядеть так:

    new Promise(send).then(
    	function (data) {
    		// И вот тут получаем данные
    	},
    	function () {
    		// Провал
    	}
    );
    
    function send (metod, url, value, header) {
    	var p = new XMLHttpRequest(),
    		body = null;
    
    	if (metod && metod.toLoweCase() == 'post') {
    		body = value;
    		p.setRequestHeader('Content-Type', header || 'application/x-www-form-urlencoded');
    	}
    
    	p.open(metod, url);
    	p.send(body);
    	p.addEventListener('readystatechange', function() {
    		if (this.readyState === this.DONE && this.status >=200 && this.status < 400) {
    			resolve(JSON.parse(this.responseText));
    		} else {
    			reject();
    		}
    	});
    }

    Увы, поддержка пока отсутствует в IE (только в Edge).
    По этой причине до сих пор придётся для решения в нативном Javascript передавать callback, как уже сказал twobomb, или использовать jQuery#Deferred().

    send();
    
    function send (metod, url, value, header) {
    	$.ajax({
    		url: url,
    		type: metod,
    		data: value,
    		dataType: 'json'
    	}).done(function (data) {
    		// И вот тут получаем данные
    	}).error(function () {
    		// Провал
    	});
    }
    Ответ написан
    Комментировать
  • Почему из localStorage возвращает массив объектов?

    DevMan
    @DevMan
    по коду вы сохраняете объект, а не массив.
    ну и скорее всего должно быть
    state.items = [1,2,3,4,5];
    или
    localStorage.setItem('game', JSON.stringify(items));
    Ответ написан
    Комментировать
  • Как отобрать следующий элемент в each()?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Вам не нужен никакой цикл
    Предположим, есть коллекция картинок (конечно же вложенных в другие элементы), и мы её нашли (для верности поиска пусть у каждой будет атрибут data-image):
    var list = $('[data-image]');

    index()
    Дальше всё просто. Например, мы кликнули на картинку и поймали событие
    $(document).on('click', '[data-image]', function (e) {
    	list.index($(this)); //это — индекс элемента в найденной ранее коллекции
    });

    eq()
    Чтобы найти любой элемент в коллекции, нужно всего лишь вызвать у неё обращение к элементу по индексу
    $(function () {
    	var list = $('[data-image]');
    
    	list.on('click', function (e) {
    		var current = $(this), //элемент коллекции, на котором произошёл клик
    			next = list.eq(list.index(current) + 1); //а вот и он — следующий элемент коллекции
    	});
    });

    Очевидно, что если бы картинки лежали одна за одной, нам пригодился бы next(). Однако, едва ли это встретится на практике, и манипуляции с уже найденной коллекцией надёжны и просты.
    Ответ написан
    2 комментария
  • Как отобрать следующий элемент в each()?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Ну например так:

    var current = N;
    
    $(elements).each(function (i) { // <- each может принимать итератор
        if (i === current + 1) {
           // 
        }
    });


    но вообще сомнительно использовать each для таких целей. В jQuery есть кучи других полезностей, вроде .next();
    Ответ написан
    Комментировать