2010-05-20 11 views
0

J'ai un lien qui appelle la ajax pour charger le contenu, et après que le contenu est chargé, ma fonction jquery ne fonctionne plusAjax chargé du contenu, jquery plugins ne fonctionne pas

Voici mon HTML

<a href="#" onclick="javascript:makeRequest('content.html','');">Load Content</a> 
    <span id="result"> 
<table id="myTable" valign="top" class="tablesorter"> 
     <thead> 
      <tr> 
      <th>Title 1</th> 
      <th>Level 1</th> 
      <th>Topics</th> 
      <th>Resources</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr> 
      <td>Example title 1</td> 
      <td>Example level 1</td> 
      </tr> 
      <tr> 
      <td>Example title 2</td> 
      <td>Example level 2</td> 
      </tr> 
     </tbody> 
     </table> 
</span> 

Le tableau est trié à l'aide du plugin de trieur de tables jquery à partir de http://tablesorter.com/docs/ Une fois le contenu ajax chargé, un autre jeu de tables contenant des données différentes est affiché. Cependant, le tri ne fonctionne plus.

Voici mon script ajax qui est utiliser pour charger le contenu:

var http_request = false; 
    function makeRequest(url, parameters) { 
     http_request = false; 
     if (window.XMLHttpRequest) { // Mozilla, Safari,... 
     http_request = new XMLHttpRequest(); 
     if (http_request.overrideMimeType) { 
      // set type accordingly to anticipated content type 
      //http_request.overrideMimeType('text/xml'); 
      http_request.overrideMimeType('text/html'); 
     } 
     } else if (window.ActiveXObject) { // IE 
     try { 
      http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try { 
       http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e) {} 
     } 
     } 
     if (!http_request) { 
     alert('Cannot create XMLHTTP instance'); 
     return false; 
     } 
     http_request.onreadystatechange = alertContents; 
     http_request.open('GET', url + parameters, true); 
     http_request.send(null); 
    } 

    function alertContents() { 
     if (http_request.readyState == 4) { 
    // alert(http_request.status); 
     if (http_request.status == 200) { 
      //alert(http_request.responseText); 
      result = http_request.responseText; 
      document.getElementById('result').innerHTML = result;    
     } else { 
      alert('There was a problem with the request.'); 
     } 
     } 
    } 

Toute idée comment je peux obtenir les plugins jquery au travail après le contenu est chargé? J'ai cherché et changé la fonction de clic de jquery.tablesorter.js en direct() comme ceci $headers.live("click",function(e) mais cela ne fonctionne pas aussi bien.

Comment puis-je faire fonctionner les fonctions de jquery après le chargement du contenu? Merci


script de mise à jour pour le test:

<a href="#" id="test" onClick="contentDisp()">Load Content</a> 
<div id="result"></div> 

<script type="text/javascript"> 
function contentDisp() 
{ 
$.ajax({ 
url : "test.html", 
success : function (data) { 
$("#result").html(data); 
$("#myTable").tablesorter(); 
$("#myTable").trigger("update"); 
} 
}); 
} 
</script> 

Ce mon test.html. Le tri de la table fonctionne si je ne le mets pas dans le contenu chargé. Une fois chargé en div, le tri ne fonctionne plus.

<table id="myTable" valign="top" class="tablesorter"> 

    <thead> 
     <tr> 
     <th class="header">Title 1</th> 
     <th class="header">Level 1</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
     <td>Example title 1</td> 
     <td>Example level 1</td> 
     </tr> 
     <tr> 
     <td>Example title 2</td> 
     <td>Example level 2</td> 
     </tr> 
    </tbody> 
    </table>  
+2

Pourquoi allez-vous à tous les problèmes http_request lorsque jQuery a la charge intégrée fonction qui le rend tellement plus facile? http://api.jquery.com/load/ – jbnunn

+0

Mes liens sont dynamiques, j'ai un problème pour assigner les différents ID div, donc j'utilise l'autre méthode ajax – Sylph

+0

Vous pouvez accéder à des ID div comme '$ (" # résultat ") '. Si vous utilisiez jQuery, vous pouviez accéder à la div dans le contexte des données renvoyées. Ce serait utile pour votre cas, je pense. – sirhc

Répondre

1

Vous devez appeler $("#myTable").trigger("update"); après l'insertion des données de la table.

S'il vous plaît jeter un oeil à this example on the tablesorter website, il peut vous aider à nettoyer votre code pour le chargement du contenu ainsi.

Si vous avez besoin de plus d'aide/code, il suffit de poster un commentaire. (Je pense que ce sera mieux pour vous de le comprendre au lieu de cuillère-alimentation, c'est pourquoi je ne l'inclue pas ici.)

+0

Bonjour, Merci beaucoup pour la réponse. :) La table append fonctionne, mais je n'ai pas l'intention d'ajouter la table. Le problème est, il semble que toutes les autres fonctions jquery ne fonctionnent pas aussi bien après le chargement d'un contenu en utilisant ajax. :( – Sylph

+0

Avoir la réponse.Merci beaucoup pour l'headstart! Je l'utilise pour appeler à nouveau la fonction après que le contenu est chargé et retourner le succès :) $ (". Tablesorter"). Tablesorter(); – Sylph