2013-08-11 4 views
0

У меня есть div, который нужно переместиться в определенную позицию, в зависимости от того, какой щелчок вызывается. Я сделал функцию для каждого. имена функций соответствуют раскрывающимся divs id + «Arrow». Затем я сделал var, который получил идентификационное имя щелкнутого раскрывающегося списка div и добавил стрелку слова, таким образом, он будет соответствовать имени функции. когда я пытался использовать var для вызова функции, он не работает.как вызвать функцию с помощью var name?

var arrowName = $(this).attr('id') + "Arrow()"; 

    function btn1s1Arrow() {$("#greenArrow").animate({top: "203px", left: "291px"}, "normal");} 
    function btn1s2Arrow() {$("#greenArrow").animate({top: "345px", left: "381px"}, "normal");} 
    function btn1s3Arrow() {$("#greenArrow").animate({top: "444px", left: "391px"}, "normal");} 

    //////dont mind this $("#qwrapper .accordionContent2").slideUp('normal'); 
    ////////dont mind this $(this).next().slideDown('normal'); 

    arrowName(); 

справка была бы очень признательна. Благодаря передовой ... я так застрял

вот часть кода, так что я сказал, на самом деле имеет смысл http://jsfiddle.net/vrs9j/1/

+0

возможно дубликат [Вызов функции JavaScript с именем в переменной] (http://stackoverflow.com/questions/172328 7/call-a-javascript-function-named-in-a-variable) – Bergi

ответ

3

Ну там нет необходимости в том, что вы могли бы сделать это:

var arrowName = $(this).attr('id'); 

var animProps = { 
    btn1s1: [203, 291], 
    btn1s2: [345, 381], 
    btn1s3: [444, 391] 
}; 

var animProp = animProps[arrowName]; 
$("#greenArrow").animate({top: animProp[0], left: animProp[1]}, "normal"); 
+0

+1 Не "мог", но "должен" :-) – Bergi

+0

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

1

Вы можете сделать что-то вроде:

window[arrowName](); 
+0

внутри функции, поэтому функции стрелок не привязаны к окну, поэтому это не будет работать, и поскольку функция привязана к событию jquery click «this» относится к элементу DOM, а не к области функций, поэтому это [arrowName]() также не будет работать. вы можете добавить функции к объекту и использовать тот же синтаксис вызова для объекта: var arrows = {// functions}; Стрелка [arrowName](); При этом я бы пошел с решениями Esailija - Hummlas –

+0

Да, справедливо. Не видел, чтобы функция находилась в пределах одной функции. – putvande

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