2010-12-15 8 views
2

Ich habe jquery Tabs zum Laden von Daten mit Ajax verwendet, aber ich muss einige Parameter der URL hinzufügen, wenn der Benutzer auf eine Registerkarte klickt. Ich kenne die Parameter nicht im Voraus, da sie aus einem Formular stammen, das vom Benutzer ausgefüllt wurde. Also habe ich so etwas wie der folgende Code versucht, aber ich verstehe es nicht funktioniert:Jquery Tabs: Ajax-Daten auf Registerkarte ändern klicken

<div id="tabs"> 
    <ul> 
     <li><a href="${tab1_url}">Tab 1</a></li> 
     <li><a href="${tab2_url}">Tab 2</a></li> 
     <li><a href="${tab3_url}">Tab 3</a></li> 
    </ul> 
</div> 

und ich serialisiert das Formular in einem Array und verbinden das Array an das Array die satic Daten enthält.

var staticData = [{name:'id',value:'${myId}'}]; 
$("#tabs").tabs({ 
    var $tabs = $("#tabs").tabs({ 
     ajaxOptions: { data: staticData}, 
     select: function(event, ui) { 
      var dynamicData = $("#common_form").serializeArray(); 
      var dataToSend = staticData.concat(dynamicData); 
      $("#tabs").tabs("option", "ajaxOptions", { 'data': dataToSend }); 
      return true; 
     } 
    }); 
}); 

aber nicht die Ajax-Daten aktualisieren, nachdem die Registerkarten erstellt werden (ich sehe die Anfrage mit Firebug gesendet und enthält nur die erste params).

Wie kann ich die Ajax-Daten ändern, wenn der Benutzer auf die Registerkarte klickt?

Dank

EDITED: jetzt mit diesem Code arbeitet

Antwort

3

Ich denke, dass die "url" Methode, was Sie suchen ist: aussehen würde

http://jqueryui.com/demos/tabs/#method-url

Sie Code etwas wie das:

$(function(){ 
    $("#tabs").tabs({ 
     select: function(event, ui) { 
      var data = $("#common_form").serialize();    
      if(ui.index == 1){ 
       var url = '${tab2_url}' + "&" + data; 
       $("#tabs").tabs("url", 1, url); //this is new ! 
      } 
      return true; 
     } 
    }); 
}); 
+0

Es funktioniert jetzt ok. Der Schlüssel war $(). Tab() zum Setzen der Werte. Obwohl ich einen etwas anderen Weg gewählt habe, denke ich, dass deine Lösung funktioniert. Vielen Dank. – Javi

0
<div id="tabs"> 
    <ul> 
     <li><a href="" name="tab" id="tab1">Tab 1</a></li> 
     <li><a href="" name="tab" id="tab2">Tab 2</a></li> 
     <li><a href="" name="tab" id="tab3">Tab 3</a></li> 
    </ul> 
</div> 

JQuery-Code ...

jQuery(document).ready(function($){ 
$("a[name=tab]").click(function(e){ 
if($(this).attr('id')=="tab1") 
{ 
//pass url1 
} 
if($(this).attr('id')=="tab2") 
{ 
//pass url2 
} 
if($(this).attr('id')=="tab3") 
{ 
//pass url3 
} 

}); 
}); 
1
jQuery(document).ready(function($){ 
$("a[name=tab]").click(function(e){ 
if($(this).attr('id')=="tab1") 
{ 
//pass url1 
} 
if($(this).attr('id')=="tab2") 
{ 
//pass url2 
} 
if($(this).attr('id')=="tab3") 
{ 
//pass url3 
} 

}); 
}); 

Diese Arbeit für mich, aber wenn ich brauche für ex 100 tabs Ich muss in allen 100 tabs URL setzen.

+0

Verwenden Sie dann ein Objekt wie ein assoziatives Array, um Übereinstimmungen zu suchen, und vermeiden Sie mehrfache if/then-Anweisungen. – Blazemonger

Verwandte Themen