我仍然是javascript的新手,我找不到我犯错误的地方。我正在使用的基本设置是一组单选按钮以及一组复选框。根据所选的单选按钮,只应选择一组特定的复选框,其余的应禁用/变灰。给定单选按钮允许哪些复选框通过php数组传入。在我的代码中,独占选项指的是单选按钮,而扩展选项指的是复选框。我的javascript和php的功能如下:
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来捕获它。有人看到我做错了吗?
感谢您的时间!
答案 0 :(得分: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]);
应该按预期工作。