PHP如何扭曲我的HTML?

时间:2015-09-19 07:08:37

标签: javascript php html5 forms

我遇到了一些问题,这些问题似乎是因为我的调查问卷是.PHP文件而不是.HTML。我必须这样做的原因是因为我使用PHP脚本来处理SQL数据库,我不得不将它们包含在调查表中,调查表不能用作HTML。

在HTML版本中,一切都按照我编码的方式完美运行。当我将它保存为.php文件时,我的javascript停止正常工作,我尝试在body标签的底部而不是头部链接javascript,但仍然没有帮助。

经过大量的反复尝试,看看有什么不同之后,我决定将.php文件保存为html,只是为了笑嘻嘻和咯咯笑,看看我是否还有同样的问题。奇怪的是,它运行与其他HTML文件一样流畅。

这里是所有3个版本的链接,所以你可以看到我的意思。

HTML v1

PHP

HTML v2

在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中做错了什么?我真的不明白为什么它会弄乱它的方式。

2 个答案:

答案 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页面的一部分