2015-06-29 4 views
0

Я работаю с API Карт Google, чтобы создать карту, в которой будут отображаться землетрясения, и я пытаюсь создать раскрывающийся список, чтобы сделать так, чтобы пользователи могли установить минимальное землетрясение для отображения, и у меня возникли некоторые проблемы.
код для создания выпадающего списка:Javascript Uncaught Reference Ошибка: функция не определена

controlText.innerHTML = "<select id='selMag' onchange='getSelMag(this)'>" + 
          "<option value='1.0'>Select Minimum Magnitude</option>" + 
          "<option value='1.0'>1.0</option>" + 
          "<option value='2.0'>2.0</option>" + 
          "<option value='3.0'>3.0</option>" + 
          "<option value='4.0'>4.0</option>" + 
          "<option value='5.0'>5.0</option>" + 
          "<option value='6.0'>6.0</option>" + 
          "<option value='7.0'>7.0</option>" + 
          "<option value='8.0'>8.0</option>" + 
          "<option value='9.0'>9.0</option>" + 
          "<option value='10.0'>10.0</option>" + 
         "</select>" 

код, чтобы получить значение из тегов:

var value; 
var magnitude = (function getSelMag(sel) { 
    var value = Number(sel.value); 
    return value; 
})(); 
console.log(magnitude); 

При использовании этого кода я получаю эту ошибку: http://i.imgur.com/7cCifkE.png (Примечание: линия 15 является var value = Number(sel.value); строка 18 равна })();, и линия обмена должна быть очевиден. Кроме того, я попытался заменить var value = Number(sel.value); на var value = 1;, чтобы узнать, будет ли он отображаться в журналах с console.log(magnitude);, и это было сделано.)

+2

Встроенные события - плохая практика. Попробуйте добавить событие в JavaScript. Посмотрите на 'addEventListener'. Чтобы создать элементы, загляните в 'document.createElement', вместо того, чтобы использовать строки. – elclanrs

+0

ну, вы не проходите в выборе, когда вы его вызываете ... – epascarello

+1

Именованное выражение функции не то же самое, что регулярная функция и может быть вызвано только этим именем из тела функции. –

ответ

0

getSelMag - это имя функции, назначенной magnitude, которая сразу же вызывается без каких-либо аргументов. Таким образом, вы остались с:

var value = Number(undefined.value) 
        //^ Cannot read property 'value' of undefined 
return value 

Даже если вы передадите аргумент, я думаю, вы непонимание использования IIFEs и, может быть, функций в целом. Название getSelMag не доступно в области видимости, переменная magnitude равна, таким образом, ReferenceError: getSelMag is not defined. Если вы хотите иметь функцию с именем getSelMag в области видимости, вы можете использовать объявление функции:

function getSelMag(sel) { 
    var value = Number(sel.value) 
    return value 
} 

или функцию выражение:

var getSelMag = function(sel) { 
    ... 
} 

Обратите внимание, что функции имеют name свойство:

var baz = function foo() {} 
baz.name // foo 

Выше, baz находится в сфере охвата, а не foo.

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