2012-05-17 4 views
0

Я застрял с этим в течение нескольких часов. Я думаю, что пришло время для некоторых новых взглядов на код. Я довольно новичок в JavaScript, поэтому я, возможно, не обратил внимания на некоторые детали. Я должен отметить, что другие функции работают правильно.JavaScript - функция не определена

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

case 2: 
    newcell.innerHTML = "<select id='size" + pid + "' class='ad_size' \ 
          onChange='updateSubtotal()'> \ 
          <option value='0'>Full</option> \ 
          <option value='1'>Half</option> \ 
          <option value='2'>Quarter</option> \ 
          <option value='3'>Eighth</option> \ 
          <option value='4'>Directory</option> \ 
         </select>"; 
    break; 

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

function updateSubtotal() { 
    console.log("size changed"); 
    return true; 
} 

Это вероятно, полезно добавить, что изначально я попытался сделать это с помощью JQuery .Кнопкой и он тоже не работает:

$(".ad_size").change(function(){ 
    console.log("size changed"); 
}); 

Любой немая ошибка, которую вы можете увидеть?

+0

изменения console.log для предупреждения и посмотреть, что происходит - я бросил свой код в новую страницу, и это устраивает встревоженной –

ответ

0

попробовать:

$(document).ready(function(){ 
     $(".ad_size").live('change',function(){ 
      console.log("size changed"); 
     }); 
    }); 
+0

' .on' не имеет никакого значения. – SLaks

+0

wow спасибо. .on не работает, но .live работал как шарм. –

+0

@Kevin_TA в любое время – mgraph

3

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

$('tableSelector').delegate('.ad_size', 'change', function(){ 
    console.log("size changed"); 
}); 

Или использовать on, если вы используете JQuery 1.7+

$('tableSelector').on('change', '.ad_size', function(){ 
    console.log("size changed"); 
}); 
+0

.delegate (1.4+) или .on (1.7+) - это подходящий способ сделать это с текущими версиями jQuery. – LocalPCGuy

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