2017-01-03 2 views
0

Я использую @ Html.DropDownListFor. У меня нет проблем с заполнением раскрывающегося списка, но я не могу установить выбранное значение с помощью JQuery. Вот упрощенная версия кода.Невозможно установить значение выпадающего меню с помощью JQuery

@{ 
var listItems = new List<ListItem> 
    { 
      new ListItem { Text = "Select Question", Value = "Select Question" }, 
new ListItem { Text = "test", Value = "test" } 
} 


<div class="row"> 
     @Html.LabelFor(m => m.SecurityQuestion, new { @class = "control-label" }) 
</div> 
<div class="row"> 
     @Html.DropDownListFor(m => m.SecurityQuestion, new SelectList(listItems, "Value", "Text"), new { id = "security", @class = "securityALLQuestion" }) 
</div> 
<div class="row"> 
     @Html.LabelFor(m => m.SecurityQuestion1, new { @class = "control-label" }) 
</div> 
<div class="row"> 
     @Html.DropDownListFor(m => m.SecurityQuestion1, new SelectList(listItems, "Value", "Text"), new {id="security1", @class="security" }) 
</div> 

И это моя функция Javascript для ее установки. Я беру все значения из раскрывающегося списка #security, а затем использую его для установки раскрывающегося списка # security1.

$('.security').on('change', function() { 
    var values = []; 
    var optionValues = []; 

    $('#security option').each(function() { 
     values.push($(this).attr('value')); 
    }); 

    for (var i = 0; i < values.length; i++) { 
     optionValues[i] = "<option value=\"" + values[i] + "\">" + values[i] + "</option>"; 
    } 

var temp ='test' 
$('#' + 'security1').html('').html(optionValues); 
$('#' + 'security1').val(temp); 
}) 

Значения значений [] и optionValues ​​[] соответствуют ожиданиям.

При проверке консоли я получаю значение temp, но предупреждение для всего оператора равно null. Я что-то упускаю?

Возможная проблема: Это потому, что я устанавливаю значение, а не текст для вопроса?

+0

У вас есть ошибки в консоли? –

+0

@ Alexandru-IonutMihai Нет ошибок на консоли. – TheFallenOne

+0

Попробуйте следующее: '$ ('# security1'). Val (temp)'. –

ответ

0

Там две вещи, необходимые для этой работы:

  1. У вас есть действующий JQuery ссылку на выберите элемент
  2. Значение, которое вы пытаетесь установить точно соответствует одному из содержащихся элементов опционных 'атрибут value.

Во-первых, убедитесь, что вы правильно выбираете элемент select. Используйте console.log для вывода значения $('#' + security1) в консоль разработчика вашего браузера. Кроме того, убедитесь, что переменная JavaScript, security1, существует и содержит соответствующий идентификатор, который вы ожидаете.

После того, как вы уверены, что ссылка на элемент jQuery хороша, просмотрите параметры в сгенерированном HTML-странице страницы (источник просмотра). Проверьте значение temp (возможно, заходите в консоль) и сравните его с атрибутами значений этих опций. Он должен соответствовать точно, или это не приведет к тому, что опция будет отмечена как выбранная.

+0

Я проверил обе ваши проблемы, и они соответствуют именно тому, что требуется. Я добавил дополнительный фрагмент кода, если он поможет вам определить проблему. – TheFallenOne

+0

Вы очищаете select innerHTML, но никогда не добавляете никаких параметров ('values' - пустой список). Поэтому он не может установить значение «test», потому что на самом деле нет параметров с этим значением; опций нет. –

+0

values.push ($ (this) .attr ('value')); используется для установки значения. Я получаю значения в выпадающем списке. Это только выбранное значение, которое является пустым, и это проблема. – TheFallenOne

Смежные вопросы