2010-06-08 4 views
3

j'avoir cette liste de sélection:JQuery SelectList Option Changé ne rafraîchissez pas

<select url="/Admin/SubCategories" name="TopParentId" id="ParentList"> 
    <option value="">Please select a parent category</option> 
    <option value="1" selected="selected">New Store</option> 
    <option value="2">Extensions</option> 
    <option value="3">Remodel</option> 
    <option value="4">Bespoke Signage</option> 
    <option value="5">Tactical Signage</option> 
    <option value="6">Size Chart</option> 
    <option value="7">Contact Info</option> 
</select> 

Comme vous pouvez le voir l'option 1 est marquée comme sélectionnée. Quand je change la sélection, j'utiliser ce code pour faire un appel ajax pour obtenir des valeurs pour remplir une nouvelle liste de sélection:

$("#ParentList").unbind("change"); 
$("#ParentList").change(function() { 
    var itemId = $(this).val(); 
    var url = $(this).attr("url"); 
    var options; 

    $.getJSON(url, itemId, function(data) { 
     var defaultoption = '<option value="0">Please select a sub-category</option>'; 
     options += defaultoption; 

     $.each(data, function(index, optionData) { 
      var option = '<option value="' + optionData.valueOf + '">' + optionData.Text + '</option>'; 

      options += option; 
     }); 

     $("#SubParentList").html(options); 
    });   
}); 

Mon problème est que chaque fois que je change la sélection, l'itemId est toujours l'id option 1, car elle est marquée comme sélectionnée. Il ne prend pas la valeur de l'option en cours de modification. Est-ce que quelqu'un peut m'éclairer de leurs connaissances s'il-vous-plaît?

Cordialement,

Jean-Philippe

+0

Vous devez transmettre le paramètre en tant qu'objet, vous avez actuellement 'itemId', quelle variable votre page recherche-t-elle dans le POST? Ce devrait être '{thatVariable: itemId}'. –

Répondre

1

Je pense que c'est ce que vous avez besoin - obtenir la valeur de l'option choisie, essayez

var itemId = $(this).find('option:selected').val(); 
+0

J'ai également essayé, mais il sélectionne toujours l'élément sélectionné à l'origine. Le problème est que cela ne change pas la sélection en cas de changement. –

+0

Que voulez-vous dire qu'il ne change pas la sélection sur le changement? –

+0

Je veux dire que l'élément marqué à l'origine comme étant sélectionné est toujours marqué comme étant sélectionné, donc itemid est toujours cette valeur. –

1

Je crois que votre problème est ailleurs. Je viens de tester votre code (à l'exclusion du JSON) et itemId est défini sur l'élément sélectionné comme prévu.

var itemId = $(this).val(); obtient la bonne valeur lors du changement.

Notez que je suppose que vous avez enveloppé votre code js ci-dessus dans $(document).ready(function(){});

Exemple de travail d'obtenir la valeur: http://jsfiddle.net/aqHrc/

+0

Oui, vous avez raison. Sauf qu'il renvoie toujours la valeur de l'élément sélectionné à l'origine. Il peut se produire quelque chose sur la liaison de données de la liste de sélection. –

+0

Dans votre requête JSON '$ .getJSON (url, itemId, ....' vous transmettez l'identifiant correct au serveur, mon exemple de code le montre Votre erreur est peut-être ailleurs dans votre code IMO. une valeur différente avant la demande JSON Mon soupçon est que l'erreur se produira encore Je pense que vous pouvez avoir un problème différent –

3

J'ai eu le même problème et trouvé une belle solution de contournement:

var before= $('#selectmenu').html(); 
$('#selectmenu').html(""); 
$('#selectmenu').html(before); 

Si vous faites cela, la zone de sélection doit être actualisée.

+0

+1 - Se sent sale, mais fonctionne comme un charme – HockeyJ

+0

+1 - travaillé pour moi, merci – Vickel

Questions connexes