当PHP的一部分包含但不是由PHP注入时,JQuery会失败

当PHP的一部分包含但不是由PHP注入时,JQuery会失败,php,jquery,include,Php,Jquery,Include,好了,伙计们,我写的一些jQuery错误处理代码有问题。问题是,如果我编写jQuery代码,以便PHP使用echo语句将其注入页面,那么代码就可以正常工作。但是,如果我只是在php语句结束后输入jQuery代码,并将其作为普通html包含,那么它将无法工作。我怀疑当jQuery实际返回到浏览器时,DOM中的元素不可用会出现某种问题,但我不确定这是怎么回事 至于代码,这里有一些例子 如果代码包含在include文件中php的end?>标记之后,那么代码就是这样编写的 <script>

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

至于代码,这里有一些例子

如果代码包含在include文件中php的end?>标记之后,那么代码就是这样编写的

<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中不存在的元素的某种问题,我希望听到一种解决方法。我已尝试使用上的委托绑定方法。我已经尝试过将代码封装在$document.ready语句和许多其他方法中,但当我不使用PHP注入jQuery代码时,它似乎忽略了我的所有努力

最让我困惑的是,我有一个类似的页面,它使用了a和.click方法,而不是a和.change方法,当jQuery代码在PHP代码之后以纯HTML的形式包含时,这种方法非常有效。我被难倒了,所以任何意见都会很好


提前感谢。

无论何时初始化页面,都应在文档中进行。就绪块:

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

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

您的代码似乎很好。它必须起作用。问题可能在于转义单报价的if条件。这里不需要那个斜杠。当您通过php注入它时,这个转义被转换为普通转义,在那里它也是需要的

只要试着让你的状况变得更好

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

还可以将代码包装到documentready中。虽然在最后一页包含它时不需要它。但为了更安全,确保所有内容都已加载,请将其包装起来

你也可以发布你的HTML代码吗?看看我的答案,但是if语句看起来有点奇怪,应该是if$adminuserlist选择[name=userlist].val=={…}你有一些额外的反斜杠。是的,这是我首选的语法,但长版本更清楚,用于教育目的:-正如在原始问题中所述,我已经尝试使用这种结构,它没有任何区别。问题是当我从PHP注入切换过来时,有一些转义字符挥之不去。是的,我也看到了,并对这个问题发表了评论,但我认为这更可能是发布问题时的复制粘贴错误。不管是哪种方式,您都应该使用document.ready块来初始化事件处理程序等。始终是您看不到的一件小事让您丧命。非常感谢你给我第二双眼睛。这很容易就把它修好了。真不敢相信我这么做了。诅咒你复制粘贴!