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

标签 php javascript 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;
    }
}

在加载的页面上显示为:

<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_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]); 应该会按预期工作。

关于php - Javascript - 在页面加载期间且仅在页面加载期间发生的 Onclick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452099/

相关文章:

javascript - jQuery 验证 - IBAN

javascript - 如何使用 hyperdom-router 更新 url

javascript - 如何将字符串日期时间范围转换为 JavaScript 日期对象?

asp.net - 哪些 .NET 控件不使用 javascript 来处理事件?

使用 onSubmit 调用时,Javascript 函数不起作用

php - CakePhp 中包含 600 000 多行的表

php - Ajax 调用在 WordPress 中无法正常工作

php - Magento 自定义管理模块是空白的

javascript - 使用数据过滤器按标签对产品进行分类?

android - 触摸行的容器 UI 元素时突出显示 ListView 行