2015-07-26 2 views
0

Я хочу построить строку или 'url' из выбранных значений формы. Я не хочу обрабатывать форму в любом месте, ее просто соединить строку из набора параметров.JQuery .val() получает правильное значение, но не передает его переменной

У меня есть класс выбрать

<div id="colorselect"> 
<select class="selectpicker" data-size="5"> 
       <option>red</option> 
       <option>blue</option> 
      </select> 
</div> 

по умолчанию является «красным», и когда я изменяю «синий» Я вижу, что изменения, введя в консоли ...

$("#colorselect.select option:selected").val(); 

который дает мне

"blue" 

Я тогда установить .val() в качестве переменной

var urlColor = $("#colorselect.select option:selected").val(); 

and pass to a function 

function urlGenerator(urlColor){ 
    var url = 'http://localhost/pixacca/' + urlColor; 

// Passes the url into the textarea 

    $("#output").val(url); 
} 

Когда я нажимаю кнопку, он возвращает красный, а не синий?

<a class="btn btn-lg btn-default" id="process" href="#" role="button">Generate</a> 

<div class="output"></div> 

$("#process").click(function() { 
    urlGenerator(urlColor) 
}); 
+2

Получите выбранное значение, когда это необходимо, вместо сохранения его в переменной. или добавьте слушателя изменений, чтобы установить значение выбранного элемента. – Braj

+1

Когда вы запускаете код, который устанавливает переменную при загрузке, выбирается «красный». Вы не получаете значение * после * выбор был изменен. –

+0

добавьте слушателя изменений, чтобы обновить значение глобальной переменной. 'var urlColor = 'синий'; // значение по умолчанию $ ('# colorselect.select'). change (function() {urlColor = $ ('# colorselect.select option: selected'). val();}); ' – Braj

ответ

3

Поместите $("#colorselect.select option:selected").val()внутри функции:

function urlGenerator(){ 
    var url = 'http://localhost/pixacca/' + $("#colorselect.select option:selected").val(); 
    $("#output").val(url); 
} 

Если присвоить некоторое значение переменной, переменная не автоматически обновлять себя.

Другими словами,

var urlColor = $("#colorselect.select option:selected").val(); 

означает: объявить переменную urlColor, а затем присвоить ему любой $("#colorselect.select option:selected").val()в настоящее время возвращается (даже если возвращаемое значение может измениться через некоторое время).


Кроме того, функция может быть сведена к

function urlGenerator(){ 
    $('#output').val('http://localhost/pixacca/'+$('#colorselect select').val()); 
} 

как value свойство select элемента представляет собой value выбранного option.

+2

Также' .select' на '# colorselect.select' является беспредметным, но, очевидно, это не проблема. –

+0

@PatrickRoberts Это правда, и есть некоторые другие оптимизации, например. селектор действительно может быть сведен к '$ (" # colorselect select ")', поскольку значение 'value' элемента select всегда является одним из выбранного параметра. Кроме того, переменная 'url' бесполезна: все это может быть просто $ ('#output') .val ('http: // ...' + $ ('#colorselect select'). Val());' , – Xufox

+0

спасибо очень много. Я также внесу исправления в ненужные биты кода :) – ServerSideSkittles

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