好了,伙计们,我写的一些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中包装代码。虽然它不需要当你包括在最后一页。但为了确保所有内容都已加载,请在其上进行包装。