当PHP的一部分包含时,JQuery会失败,但如果被PHP注入则不会


JQuery fails when part of PHP include but not if injected by PHP

好了,伙计们,我写的一些jQuery错误处理代码有一个问题。问题是,如果我编写jQuery代码,以便PHP使用echo语句将其注入页面,那么代码就可以正常工作。然而,如果我只是在php语句结束后输入jQuery代码,并让它被包含,如果它只是正常的html,它无法工作。我怀疑有某种形式的问题与元素不可用的DOM时,jQuery实际上使它回到浏览器,但我不确定这可能是如何的情况下。

代码示例如下:

如果包含在include文件中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尝试了委托绑定方法。我试过将代码封装在$(文档)中。ready语句,以及其他一些方法,但是当我不使用PHP注入jQuery代码时,它似乎忽略了我所有的努力。

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

无论何时初始化页面,都应该在文档中初始化。准备好块:

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

在执行初始化代码之前,这确保文档是"就绪"的,即没有更多的HTML需要下载,并且所有元素都存在于DOM中。

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

试着让你的条件

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

还要在document ready中包装代码。虽然它不需要当你包括在最后一页。但为了确保所有内容都已加载,请在其上进行包装。