2014-11-28 3 views
0

У меня есть довольно простой вопрос jQuery. Я пытаюсь вызвать существующую функцию в зависимости от опции, выбранной из списка выбора.Функция триггера jquery на основе списка выбора

Пример HTML:

<select name="selectAction" id="selectAction"> 
    <option>Choose an action</option> 
    <option value="firstFunction">First Function</option> 
    <option value="secondFunction">Second Function</option> 
    <option value="thirdFunction">Third Function</option> 
</select> 

Цель состоит в том, чтобы запустить firstFunction(), если выбран этот вариант, secondFunction(), если это один выбран и т.д.

я могу получить значение из выберите список, но не знаете, как использовать его для выполнения определенной функции.

Так я это, до сих пор:

$(document).ready(function() { 
$('body').on('change', '#selectAction', function(e) { 
    var theValue = $(this).find(":selected").val(); 
}); 

});

Я знаю, что могу использовать eval(), чтобы справиться с этим - eval(theValue + '()'); - но я стараюсь избегать этого курса. Я также понимаю, что могу использовать серию if/else или операторов switch/case, но это кажется немного неэлегантным. Есть ли способ вызвать функцию, основанную на самом имени значения?

ТИА - Джо

+1

Поместите эти функции в объект '{имя: FUNC, name2: func2} [nameToBeCalled]()' –

+0

Это то, что вы спрашиваете? http://stackoverflow.com/a/3326095/903014 – Steve

+0

@YuryTarabanko - Извините, я не знаю, что вы имеете в виду. Вы можете уточнить? –

ответ

1

Создать объект, который выступает в качестве имен для ваших функций. И привязывайтесь к избранному изменению.

$(function() { 
    var API = { 
    firstFunction: function(){}, 
    secondFunction: ... 
    }; 

    $('#selectAction').change(function() { 
     var method = API[$(this).val()]; 
     return method && method(); 
    }); 
}); 
+0

Спасибо, Юрий, но функция работает не так, как ожидалось. Просто чтобы убедиться, что я понимаю, значение для каждого элемента массива всегда будет 'function() {}' like 'firstFunction: function() {}, secondFunction: function() {}' - это правильно? –

+0

Нет. Значение должно быть функцией, которую вы хотите вызвать. :) –

+0

Спасибо за разъяснение. Понял. –

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

  • Нет связанных вопросов^_^