2016-12-04 4 views
1

Ich bevölkere die Optionen eines Select-Eingabefeldes basierend auf JSON-Daten, die ich von einem PHP-Skript bekomme.Suchschlüssel in JSON-Objekt basierend auf Wert

Das funktioniert gut, aber ich möchte einige zusätzliche Informationen anzeigen, basierend auf der ausgewählten Option. Grundsätzlich, ich suche nach einer Möglichkeit, den Schlüssel zu finden, die mit der gewählten Option geht:

$("#code").html(result[whichkey]["uniquecode"]); 

This fiddle hoffentlich macht meine Frage etwas klarer.

Jede Hilfe wird sehr geschätzt!

Antwort

2

Vorausgesetzt, dass das option Element mit der uniquecode des Objekts als Wert erstellt wird, warum müssen Sie sogar erneut auf das Objekt zugreifen? Sie können einfach die value Eigenschaft des ausgewählten option ... abrufen?

Angenommen, dies nur, weil Sie Ihr Beispiel stark vereinfacht haben, und die Objekte innerhalb des Arrays nicht halten andere nützliche Daten, die nicht in der option Element gehalten wird selbst, dann können Sie $.grep verwenden, um die Anordnung von Objekten durch die filtern uniquecode ausgewählt, wie folgt aus:

var json = '[{"uniquecode":"b32dez2","name":"John Doe","foo":"bar"},{"uniquecode":"a2df32","name":"Adam Smith","foo":"buzz"}]'; 
 
var result = JSON.parse(json); 
 
var $sel = $('#names').change(function() { 
 
    var value = this.value; 
 
    var obj = $.grep(result, function(e) { 
 
    return e.uniquecode == value; 
 
    }); 
 
    $("#code").html(obj[0].uniquecode + '/' + obj[0].foo) 
 
});; 
 

 
result.forEach(function(obj) { 
 
    $('<option value="' + obj.uniquecode + '">' + obj.name + '</option>').appendTo($sel) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select id="names"></select> 
 
<div id="code"></div>

Bitte beachte, dass ich die foo Eigenschaft auf dem Objekt hinzugefügt Ihnen zeigen, wie außerhalb von thos Eigenschaften des Objekts zugreifen e platziert direkt auf dem option Element.

Beachten Sie auch, dass ich den Code, der die option Elemente generiert, auch vereinfacht. Wenn Sie jQuery einmal in Ihrem Projekt verwenden möchten, können Sie es auch überall verwenden.

+0

Ich habe meine Frage tatsächlich zu stark vereinfacht, die Objekte innerhalb des Arrays enthalten andere nützliche Daten, die nicht im Optionselement selbst enthalten sind. Ihr Beispiel macht genau das, wonach ich gesucht habe. Wusste nicht über '$ .grep'. Danke vielmals! – binoculars

+0

Bin gerade auf ein neues Problem gestoßen. Ich verwende jQuery Validation (https://github.com/jzaefferer/jquery-validation), um das Formular zu validieren. Mit diesem Plugin kann ich bestimmte Regeln definieren: 'rules: {'name-of-input-field': {benötigt: true, range: [60, 120]}'. Dies erlaubt nur Ziffern zwischen 60 und 120. Wie kann ich diesen Bereich basierend auf der gewählten Option dynamisch ändern, wenn 'range_upperlimit' und' range_lowerlimit' ebenfalls Teil des json-Objekts sind? – binoculars

+0

Ich glaube, dass der Validator auch Attribute berücksichtigt, die Sie dem Element hinzufügen, um seine Regeln festzulegen. Überprüfen Sie die Dokumentation für weitere Informationen, oder fühlen Sie sich frei, eine neue Frage für sie zu starten –