我遇到了一些问题,这些问题似乎是因为我的调查问卷是.PHP文件而不是.HTML。我必须这样做的原因是因为我使用PHP脚本来处理SQL数据库,我不得不将它们包含在调查表中,调查表不能用作HTML。
在HTML版本中,一切都按照我编码的方式完美运行。当我将它保存为.php文件时,我的javascript停止正常工作,我尝试在body标签的底部而不是头部链接javascript,但仍然没有帮助。
经过大量的反复尝试,看看有什么不同之后,我决定将.php文件保存为html,只是为了笑嘻嘻和咯咯笑,看看我是否还有同样的问题。奇怪的是,它运行与其他HTML文件一样流畅。
这里是所有3个版本的链接,所以你可以看到我的意思。
在JS控制台中我收到此错误
未捕获的TypeError:无法设置null
的属性'onClick'
它引用了我的.js文件的第163行,该文件引用了调查问卷第一页的“下一步”按钮(不是加载的介绍页面,而是实际输入数据的下一页)。
我在.PHP文件中设置问卷的方式是
<?php ini_set('display_errors','on'); ?><?php include('extlib/vdaemon/vdaemon.php'); ?><!doctype html>
<html>
<head>
//links to files etc.//
</head>
<header>
</header>
<body>
<form action="core/process.php" method="post" id="CorpID" runat="vdaemon">
<input type="hidden" name="formID" value="Questionnaire" />
<input type="hidden" name="redirect_to" value="http://optiqvision.x10host.com/Corp_ID_&_Branding_Questionnaire.html" />
//all form inputs//
</form>
<?php VDEnd(); ?>
</body>
<footer>
</footer>
</html>
整个调查问卷有超过100个个人输入,所以我不想把所有这些都放在这个片段中。我只想展示所有结构,而且我想你可以在浏览器中获得更多细节,点击它们并查看调试器以查看更多正在发生的事情。任何人都可以确定我在PHP中做错了什么?我真的不明白为什么它会弄乱它的方式。
答案 0 :(得分:1)
编辑:看起来真正的问题是DOM被破坏了。在PHP文件中,您有一个自封闭的textarea标记。 textarea标签需要一个结束标签。
<!-- you have this, it's not syntactically correct -->
<textarea id="my_comp" class="tex_inp01" style="width:88%; height:100px; font-size:14pt;" />
<!-- the following is correct -->
<textarea id="my_comp" class="tex_inp01" style="width:88%; height:100px; font-size:14pt;"></textarea>
将Corp_ID_&amp; _Branding_Questionnaire.js放在正文标记之前,它会起作用。 PHP文件抛出javascript错误的原因是因为节点“p1_next”在运行时不存在,因为您的JS位于head标记中。
它在HTML文件中工作的原因主要归功于运气。静态HTML的加载速度足够快,以至于在JS代码运行时DOM已准备就绪。作为规则的拇指,通常在body标签之前包含所有JS。当然有一些例外。
如果你真的需要在头脑中包含你的脚本,你可以用这个包装所有代码来等待DOM准备就绪:
$(document).ready(function() {
console.log( "ready!" );
// your JS code here
});
最后,如果您要将jQuery用作库,那么建议使用jQuery语法而不是本机JS。只需确保在代码之前包含jQuery JS。
var p1a = document.getElementById("p1_next");
// becomes:
var p1a = $('#p1_next'); // jQuery node by CSS selector
在这样的身体标签结束之前:
<html>
<head>
..your code ..
</head>
<body>
..your code ..
<script type="text/javascript" src="http://www.optiqvision.x10host.com/Files/Javascript/Corp_ID_&_Branding_Questionnaire.js"></script>
</body>
</html>
答案 1 :(得分:1)
在你的html中,textarea的代码是这样的:
{{1}}
在你的php中
textarea结束标记放错地方;在很多div之后,包括id = p1_next的元素。所以div只是成为textarea值的一部分而不是HTML页面的一部分