2013-08-09 1 views
0

Я создаю плагин jquery, и мне нужно указать переменную для каждого целевого элемента. Моя проблема заключается в том, что когда я делаю это в моих ЯШ:Собственные данные var для каждого элемента

$("section ul").cards("init", { 
    current: 0 
}).on("mousewheel", mousewheel); 

function mousewheel(){ 
    $(this).cards("next"); 
}; 

Плагин каждение в console.log() обновленный current. Но он обновляет одни и те же данные ко всем «ul».

mousewheel Когда я в первый ul, ток для него стал 1 (старт 0) и только после того, как я mousewheel во втором ul и ток стал 2 ...

Я хочу, чтобы каждый объект самостоятельно переменная ($(this).data())

Спасибо!

!! РЕДАКТИРОВАТЬ !!

Существует мой плагин база:

(function($){ 

    $.fn.cartes = function(methode, options){ 

     if(options){ 
      return methodes[methode].apply(this, $.makeArray(options)); 
     } 
     else { 
      return methodes[methode].call(this); 
     }; 

    }; 

    var methodes = { 
     init: function(options){ 

      return this.each(function(){ 

       var $this = $(this); 
       var Options = $.meta ? $.extend($.fn.cartes.defauts, options, $this.data()) : options; 

       $this.data("options", Options); 

       $this.each(function(index){ 

        $this.data("options").rotation = $.fn.cartes.defauts.rotation; 
        $this.data("options").espacement = $.fn.cartes.defauts.espacement; 

       }); 

      }); 

     }, 
     prec: function(obj){ 

      return $(obj).each(function(){ 
       $(this).data("options").cur--; 
       console.log($(this).data("options").cur); 
      }); 

     }, 

     next: function(obj){ 

      return $(obj).each(function(){ 
       $(this).data("options").cur++; 
       console.log($(this).data("options").cur); 
      }); 

     } 
    }; 

    $.fn.cartes.defauts = { 
     cur: 0, 
     espacement: 0, 
     rotation: -45 
    }; 

})(jQuery); 

!! ИЗМЕНИТЬ 2 !!

Когда я использую каждый цикл, console.log в событии mousewheel возвращает хорошие данные.

$("section li.double ul").each(function(){ 
    $(this).cartes("init", { 
    actuel: 0, 
    selecteur: "li" 
    }); 
}); 

Но как это сделать без каждой петли.

ответ

0

Финлей, это только потому, что:

var Options = $.meta ? $.extend($.fn.cartes.defauts, options, $this.data()) : options; 

заменить его:

var Options = $.extend($.fn.cartes.defauts, options, $this.data()); 

и работать!

1

В плагине это обычно использовать .each цикл, чтобы применить плагин к каждому элементу, например .:

init: function(opts) { 
    return $.each(function() { 
     ... 
    }); 
} 

, где вы можете использовать .data внутри цикла .each, давая каждому элементу свои собственные данные. Вам также нужно будет клонировать объект с $.extend(), прежде чем хранить его в .data(), в противном случае каждый элемент по-прежнему будет иметь ссылку на те же данные.

+0

Я уже делаю это ... – Jordan

1
;(function($){ 
    $.fn.extend({ 
    cards: function(){ 
     return this.each(function(i,e){ 
     // 
     // additional plugin logic 
     // 

     // `this` represents every item you're manipulating. here you 
     // can assign `.data()` to each one (with its own specific value(s)). 
     // For instance: 
     $(this).data('whatevername', 'whatevervalue'); 

     // 
     // additional plugin logic 
     // 
     }); 
    } 
    }); 
})(jQuery); 

Что-то в этом роде?

+0

Я делаю это, но когда i console.log() один из $ (this) .data(), все элементы возвращают одни и те же данные. – Jordan

+0

Вы уверены, что они одни и те же данные (т. Е. Одни и те же объекты) или просто _look like_ одни и те же данные? – Alnitak

+0

@ Jordon, если вы выполняете одну и ту же инициализацию на всех своих, они молоды, чтобы запустить одни и те же данные. –

0

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

+0

Я только что редактировал. – Jordan

Смежные вопросы