2014-01-15 4 views
0

У меня возникла странная проблема с моим кодом JQuery. Я пытаюсь изменить атрибут CSS, на какой-то элемент на странице.Код не запускается внутри функции

это код, который я пытался подножка и работал:

$("#player").css({ 
    "width" : "+=10" 
}); 

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

это функция:

function change_elem_size (elemID,whatToChange,value) { 
    $('#' + elemID).css({ 
     whatToChange : value 
    }); 
    } 

это, как я вызываю функцию:

function move_right (elemID,event) { 
    $(document).keydown(function(event){ 
     change_elem_size(elemID,"width","+=10"); 
     }); 
} 


    $(document).ready(function(){ 

     move_right("player",event); 
    }); 

Почему я не могу использовать функцию, чтобы изменить атрибут CSS?

(простите за мой английский)

+2

Почему этот вопрос не принят? Он показывает усилие и код и задает четкий вопрос. –

+0

@ T.J.Crowder you probebly right, но в chrome код работал с «шириной», «+ = 10» « – samy

+1

@samy Да, он работает с двойными кавычками; однако у вас нет этих вопросов, и проблема с ними - проблема. –

ответ

3

Левая сторона собственности инициализаторе внутри объекта инициализаторе (бит перед :) всегда является буквальным, никогда не является переменной. Так что этот код:

function change_elem_size (elemID,whatToChange,value) { 
    $('#' + elemID).css({ 
     whatToChange : value 
    }); 
} 

..sets свойство , он не использует значение переменной, чтобы установить имя свойства. Чтобы сделать это, не использовать объект:

function change_elem_size (elemID,whatToChange,value) { 
    $('#' + elemID).css(whatToChange, value); 
} 

... или необязательно использовать объект, но использовать квадратные скобки обозначения, так что значение из становится имя свойства. Чтобы сделать это, вы должны построить объект, а затем добавить свойство к нему (вы не можете сделать это с помощью инициализатора объекта):

function change_elem_size (elemID,whatToChange,value) { 
    var change = {}; 
    change[whatToChange] = value; 
    $('#' + elemID).css(change); 
} 
4

Почему я не могу использовать функцию для изменения CSS атрибут?

Вы можете. То, что вы не может do, использует динамический ключ для литерала объекта. Это означает, что когда вы делаете:

{ 
    whatToChange : value 
} 

он рассматривает как имя свойства, а не как переменная, которая содержит значение, которое должно быть именем свойства. Вам нужно будет сделать это:

function change_elem_size (elemID,whatToChange,value) { 
    var options = {} 
    options[whatToChange] = value; 
    $('#' + elemID).css(options); 
} 
Смежные вопросы