J'ai du code html généré par JavaScript. Le JavaScript génère les éléments (option) dans une liste déroulante (sélectionnez). Je veux ensuite obtenir la valeur de l'option sélectionnée '1', mais à la place 'test' est renvoyé.
Le html est généré en utilisant:
var siteId = $('#siteID').val(); // returns 'test' var siteId2 = $('#siteID').data("value"); // returns undefined var siteId3 = $('#siteID').attr("value"); // returns undefined var siteId4 = $('#siteID').prop("value"); // returns 'test'
J'ai alors essayé les méthodes suivantes pour obtenir la valeur de l'option sélectionnée:
var newSelect = document.createElement('option'); selectHTML = "<option value=\"" + 1 + "\">" + test + "</option>"; newSelect.innerHTML = selectHTML; document.getElementById('siteID').add(newSelect);
5 Réponses :
Vous utilisez une manière très étrange de créer votre option - vous créez une option, puis insérez une chaîne d'option en tant que innerHTML
Code fixe (voir l'exemple plus tard)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select id="siteID"> </select>
De plus, vous ne sélectionnez pas réellement l'option, donc la valeur sera celle que le navigateur pense être sélectionnée
Pourquoi ne pas utiliser jQuery?
p>
var opt = document.createElement('option'); opt.value=1; opt.text="test" document.getElementById('siteID').appendChild(opt); console.log(document.getElementById('siteID').value, $('#siteID').val()) console.log(document.getElementById('siteID').outerHTML)
<select id="siteID"> </select>
Votre code:
var test ="Test"; var newSelect = document.createElement('option'), selectHTML = "<option value=\"" + 1 + "\">" + test + "</option>"; newSelect.innerHTML = selectHTML; document.getElementById('siteID').add(newSelect); console.log(document.getElementById('siteID').outerHTML)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select id="siteID1"> <option value="">Please select</option> </select>
Votre code FIXE
$("<option />", { value: 1, text: "test" }).appendTo('#siteID1') $('#siteID1').prop("selectedIndex", 1); // NOW the value is 1 console.log( $('#siteID1').val() )
var opt = document.createElement('option'); opt.value=1; opt.text="test" document.getElementById('siteID').appendChild(opt);
Vous avez créé l'option newSelect
puis vous essayez d'insérer une option à l'intérieur de celle-ci avec innerHTML
qui est l'endroit où vous vous êtes trompé.
C'est ce que vous auriez dû faire.
var newSelect = document.createElement('option'); newSelect.innerHTML = 'test'; newSelect.value= '1'; document.getElementById('siteID').add(newSelect);
Vous pouvez d'abord créer la balise Select, puis essayer d'ajouter la balise option. J'ai joint le code comme ci-dessous:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> Dropdowm:<div id='test'></div>
// create the select tag and append with the main div tag var string = '<select id="dropdown_tag"></select>'; $("#test").append(string); // create as many option you want and append with the select tag var newSelect = document.createElement('option'); selectHTML = "<option>---select---</option>"; selectHTML += "<option value='1'>1</option>"; selectHTML += "<option value='2'>2</option>"; $("#dropdown_tag").append(selectHTML); // Onchange event of dropdown tag $(document).on('change',"#dropdown_tag", function() { alert($(this).val()); });
Veuillez essayer ceci
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select id="siteID"></select>
var test = 'test'; selectHTML = "<option value=\"" + 1 + "\">" + test + "</option>"; $("#siteID").append(selectHTML); var siteId = $('#siteID').val(); console.log(siteId);
Vous devez supprimer // selectHTML = "";
Et passer à newSelect. value = 1;
pour ajouter de la valeur à l'option par javascript
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select id='siteID'> </select>
var newSelect = document.createElement('option'); var test = 'test'; //selectHTML = "<option value=" + 1 + ">" + test + "</option>"; newSelect.innerHTML = test; newSelect.value = 1; document.getElementById('siteID').appendChild(newSelect); $(document).ready(function(){ var siteId = $('#siteID').val(); // r console.log(siteId); });
newSelect.innerHTML = test; newSelect.value = 1;
utilisez jquery, pour ex- $ ('# example'). append ('');