2012-07-02 2 views
0

У меня есть различные элементы с тем же классом.jquery hover и нажмите события, возвращающие несколько объектов

Я хочу иметь события для всех элементов, но я только хочу, чтобы собрать информацию от первого элемента следующим образом:

elements[i].before = css($(elements[i].handle).first()); 

Когда я парить над элементами, которые он дает мне предупреждение для каждого элемента. ! .. Отлично ... но функция CSS() возвращает все 3 из элементов CSS, даже если я использую первый() ... функция КСС:

function css(a){ 
     var sheets = document.styleSheets, o = {}; 
     for(var i in sheets) { 
      var rules = sheets[i].rules || sheets[i].cssRules; 
      for(var r in rules) { 
       if(a.is(rules[r].selectorText)) { 
        o = $.extend(o, css2json(rules[r].style), css2json(a.attr('style'))); 
       } 
      } 
     } 
     return o; 
    } 

    function css2json(css){ 
     var s = {}; 
     if(!css) return s; 
     if(css instanceof CSSStyleDeclaration) { 
      for(var i in css) { 
       if((css[i]).toLowerCase) { 
        s[(css[i]).toLowerCase()] = (css[css[i]]); 
       } 
      } 
     } else if(typeof css == "string") { 
      css = css.split("; ");   
      for (var i in css) { 
       var l = css[i].split(": "); 
       s[l[0].toLowerCase()] = (l[1]); 
      }; 
     } 
     return s; 
    } 

Я пробовал:

if(event.target != this){ 
    return true; 
} 
event.stopPropagation(); 

без толку ... Полный источник здесь:

var options = [ 
     '#content', 
     'h5'    
    ]; 
    var elements = []; 
    var current_item = ''; 


      for(a in options){ 
       elements[a] = { 
        'handle': options[a], 
        'before': '', 
        'after': '' 
       }; 

       $(elements[a].handle).attr('index', a); 

       $(elements[a].handle).hover(
        function(event){ 
         if(event.target != this){ 
          return true; 
         } 
         event.stopPropagation(); 
         var i = get_index(this); 
         elements[i].before = css($(elements[i].handle).first()); 
         $(this).css({ 
          border: '1px dashed red', 
          padding: '5px' 
         }); 
        }, 
        function(){ 
         var i = get_index(this); 
         $(this).css(elements[i].before); 
        } 
       ); 

       $(elements[a].handle).click(
        function(){ 
         if(event.target != this){ 
          return true; 
         } 
         event.stopPropagation(); 
         var i = get_index(this); 
         alert(i); 
         $('#current_item').val(options[i]);  
        } 
       ); 
      } 

Любые идеи?

ответ