2012-05-04 2 views
2

Я до сих пор довольно новичок в javascript, и я не нахожу, где я делаю свою ошибку. Основной настройкой, с которой я работаю, является набор переключателей и набор флажков. В зависимости от переключателя выбора должен быть доступен только определенный набор флажков, остальные должны быть отключены/выделены серым цветом. Какие флажки разрешены для данного переключателя, передаются через массив php. В моем коде эксклюзивные варианты относятся к переключателям, в то время как расширенные варианты относятся к флажкам. Мое Javascript и PHP для этой функции выглядит следующим образом:Javascript - событие Onclick происходит во время и только во время загрузки страницы

window.onload = function(){ 
    <?php 
    for($i = 0; $i < count($students_information); $i++){ 
     foreach($exclusive_extended_array as $exclusive => $extended){ 
      echo "$('".$i."_exclusive_".$exclusive."').onclick = allow(".$i.",".json_encode($extended).");"; 
     } 
    } 
    ?> 
} 
function allow(i, extended){ 
    $('[id^="'+i+'Extended"]').disabled = true; 
    for (var j = 0; j < extended.length; j++) { 
     alert(extended[j]); 
     $(i+"Extended"+extended[j]).disabled = false; 
    } 
} 

На загруженной странице появляется, как:

<script type="text/javascript"> 
window.onload = function(){ 
    $('0_exclusive_2176').onclick = allow(0,[1975]); 
    $('0_exclusive_911').onclick = allow(0,[]); 
    $('0_exclusive_795').onclick = allow(0,[1973,1975]); 
} 
function allow(i, extended){ 
    $('[id^="'+i+'Extended"]').disabled = true; 
    for (var j = 0; j < extended.length; j++) { 
     alert(extended[j]); 
     $(i+"Extended"+extended[j]).disabled = false; 
    } 
} 
</script> 

К сожалению, что код заканчивает делать это работает скрипт при загрузке страницы, а чем при проверке одного из переключателей. Я не думаю, что это проблема с именами элементов (хотя я понимаю, что стиль именования несовместим, однако у меня нет полного контроля над этим). Я предполагаю, что только я делаю простую ошибку в коде, и у меня все еще недостаточно опыта работы с javascript, чтобы поймать его. Кто-нибудь видит, что я делаю неправильно?

Благодарим вас за внимание!

+2

try $ ('0_exclusive_2176'). Onclick = function() {ваш код идет здесь} – MilkyWayJoe

ответ

6

Вы назначая обработчик щелчка, как это:

$('0_exclusive_2176').onclick = allow(0,[1975]); 

То, что происходит: allow побежал и его возвращаемое значение (undefined) устанавливаются как событие. Вам нужно установить onclick к функции:

$('0_exclusive_2176').onclick = function(){ 
    allow(0,[1975]); 
}; 

Вы также можете сделать allow возвращающую функцию:

function allow(i, extended){ 
    return function(){ 
     $('[id^="'+i+'Extended"]').disabled = true; 
     for (var j = 0; j < extended.length; j++) { 
      alert(extended[j]); 
      $(i+"Extended"+extended[j]).disabled = false; 
     } 
    }; 
} 

Теперь $('0_exclusive_2176').onclick = allow(0,[1975]); должен работать, как ожидалось.

+0

Awesome. Спасибо! Кроме того, я очень одобряю аватар. – golmschenk

+0

@ golmschenk: Рад, что я могу помочь! Кроме того, спасибо :-) Я сделал аватар с создателем пони (http://generalzoi.deviantart.com/art/Pony-Creator-Full-Version-254295904) :-P –

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