2011-05-05 6 views
1


J'ai ci-dessous la fonction qui est utilisée pour initialiser un widget.jquery étrange comportement

jQuery.fn.initPortlet = function(parent_component ,header , component){ 
     var o = $(this[0]) 
     this.addClass("ui-widget ui-widget-content ui-corner-all") 
      .find(header)   
      .addClass("headertitle") 
      .addClass("align_center") 
      .addClass("defaultheadercolor") 
      .prepend('<span class="ui-icon ui-icon-minusthick"></span>') 
      .end() 
      .find(component); 
}; 

html:

<div class="div_portlet" id="LINEITEM_HEADER" > 
<div class="div_header"><%=hu.getFrameURL(82,83)%> Line Item Header Information</div> 
      <div class="div_content" id="LINEITEM_HEADER_CONTENT"> 

      </div> 
</div> 

ce qu'il fait est ajouter une icône moins dans le coin supérieur gauche du widget. J'ai un appel ajax à cause de cela cette fonction est appelée plusieurs fois et ajoute une icône moins plusieurs fois.

Je suis d'accord pour réécrire cette fonction de telle manière, de sorte que combien de fois il est appelé, ajouter une seule icône moins dans l'en-tête.
J'ai essayé l'approche en jachère, mais cela n'a pas fonctionné.

var $minusthick = $('span.ui-icon ui-icon-minusthick'); 
$('div.div_header').find($minusthick).remove().prepend('<span class="ui-icon ui-icon-minusthick"></span>').end(); 

ce que je suis Tring est de supprimer toute la durée avec le nom de classe span.ui-icon-icon-ui minusthick et enfin ajouter une icône moins, mais pas travaillé pour moi.

toute aide ou suggestion afin que je puisse atteindre mon objectif sera très appréciée.
Merci d'avance !!!!!

Edit--

solution

donnée ci-dessous fonctionne très bien pour un appel, mais it fails if i am calling this function again with same parameter et il devrait être et, malheureusement, je dois appeler cette fonction à plusieurs reprises ... comment puis-je faire this..i essayé beaucoup de chose, mais il échoue quelque part :(:(:(
S'il vous plaît me suggérer une approche
Merci encore une fois ....

Répondre

5

Vous pouvez utiliser jQuery.data() pour suivre si elle a déjà été ajouté.

jQuery.fn.initPortlet = function(parent_component, header, component){ 
     var o = $(this[0]); 
     if (! o.data('widgeted')) { 
      // .data('widgeted') will return NULL before it is set. 
      // So the first iteration of the function will execute 
      // this code block. 
      this.addClass("ui-widget ui-widget-content ui-corner-all") 
       .find(header)   
       .addClass("headertitle align_center defaultheadercolor") 
       .prepend('<span class="ui-icon ui-icon-minusthick"></span>') 
       .end() 
       .find(component); 
     } 
     // We set widgeted to true. Any further calls to this function 
     // (on this DOM node) will not execute the code block above. 
     o.data('widgeted', true); 
}; 
+0

+1 pour l'astuce neat :) –

+0

@ Stephen- Merci pour la réponse, mais je voudrais savoir ce que signifie de cette o.data («widgeted»)? – Vivek

+0

+1, je le fais tout le temps. –