Javascript - 在页面加载期间和仅在页面加载期间发生的Onclick事件

gol*_*enk 2 javascript php onclick onload

我仍然是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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在加载的页面上,它显示为:

<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>
Run Code Online (Sandbox Code Playgroud)

不幸的是,代码最终做的是在页面加载时运行脚本,而不是在检查其中一个单选按钮时运行脚本.我不认为这是元素名称的问题(虽然我确实认为命名风格不一致,但是,我没有完全控制它).我假设它只是我在代码中犯了一个简单的错误,我仍然没有足够的经验使用javascript来捕获它.有谁看到我做错了什么?

感谢您的时间!

Roc*_*mat 6

您正在分配您的点击处理程序,如下所示:

$('0_exclusive_2176').onclick = allow(0,[1975]);
Run Code Online (Sandbox Code Playgroud)

发生的事情是:allow运行并将其返回值(undefined)设置为事件.你需要设置onclick一个函数:

$('0_exclusive_2176').onclick = function(){
    allow(0,[1975]);
};
Run Code Online (Sandbox Code Playgroud)

您还可以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;
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

现在$('0_exclusive_2176').onclick = allow(0,[1975]);应该按预期工作.