1

好吧,伙计们,我编写的一些 jQuery 错误处理代码有问题。问题是,如果我编写 jQuery 代码以便 PHP 使用 echo 语句将其注入到页面中,那么代码就可以正常工作。但是,如果我只是在 php 语句结束后输入 jQuery 代码并让它被包含,就好像它只是普通的 html 一样,它就无法工作。我怀疑当 jQuery 实际返回浏览器时,DOM 中不可用的元素存在某种问题,但我不确定这是怎么回事。

至于这里的代码是示例。

如果包含在包含文件中 php 的结尾 ?> 标记之后,这就是代码的编写方式。

<script>

    $("#adminuserlist select[name=userlist]").change(function(){ 
            if($("#adminuserlist select[name=userlist]").val() == \'\'){
                $("#noadminuser").css("visibility", "visible"); 
                $("#noadminuser").dialog({ 
                    modal:true, 
                    show: { 
                        effect: "fade", 
                        duration: 300 
                    }, 
                    hide: { 
                        effect: "fade", 
                        duration: 300 
                    } 
                }); 
            } 
            else{ 
                $("#adminuserlist").submit(); 
            }
        }
    );

</script>

这就是我用 PHP 注入代码时的样子。如果我这样做,它会起作用,但在我看来,这有点像组织上的噩梦。

<?php echo '<script>';

    echo '$("#adminuserlist select[name=userlist]").change(function(){ if($("#adminuserlist select[name=userlist]").val() == \'\'){ $("#noadminuser").css("visibility", "visible"); $("#noadminuser").dialog({ modal:true, show: { effect: "fade", duration: 300 }, hide: { effect: "fade", duration: 300 } }); } else{ $("#adminuserlist").submit(); }});';

echo '</script>'; ?>

当我从这两种配置中检查浏览器中的结果源时,它们似乎在间距之外是相同的。如果这是加载 jQuery 时 DOM 中不存在的元素的某种问题,我很想听听修复它的方法。我已经尝试过使用 on 的委托绑定方法。我尝试将代码封装在 $(document).ready 语句中,以及许多其他方法,但是当我不使用 PHP 注入 jQuery 代码时,它似乎忽略了我的所有努力。

最让我困惑的是我有一个类似的页面,它使用 a 和 .click 方法而不是 a 和 .change 方法,当 jQuery 代码作为直接 HTML 包含在 PHP 代码之后时,它可以完美地工作。我很难过,所以任何输入都会很棒。

提前致谢。

4

2 回答 2

2

无论何时初始化页面,都应该在 document.ready 块中进行:

<script>
$(document).ready(function() {
    // Your initialisation code here, including setting up event handlers
});
</script>

这确保了文档“准备就绪”,即在执行初始化代码之前,不再需要下载 HTML 并且所有元素都存在于 DOM 中。

于 2013-05-24T04:24:16.220 回答
0

你的代码看起来不错。它必须工作。问题可能出在您的 if 条件上转义单引号。这里不需要那个斜线。当您通过 php 注入它时,该转义将转换为普通转义,并且也需要它。

试着让你的条件

if($("#adminuserlist select[name=userlist]").val() == ''){

还将您的代码包装在准备好的文档中。虽然当您将它包含在页面的最后时不需要它。但为了更安全地确保所有内容都已加载,请将其包裹起来。

于 2013-05-24T04:35:17.673 回答