简要说明:
您正在尝试仿佛“按需”脚本语言两者都是客户端,以两种不同的语言结合起来。
Javascript是客户端,因此将基于事件侦听器或任何其他定义的参数运行。 PHP是服务器端,因此,将在文件解析时运行。这意味着,当Javascript甚至进入图片时,您的PHP已经被处理并且不在图片之中。
什么是你的脚本发生目前:
这个文件被解析,PHP是确定的,并且运行第一。运行后立即写入文件。 PHP默认为“textBox.value”的文本值,因为它不是一个实际变量(如果是的话,它会以$开头)。诚实地说,它应该返回一个错误,即“textBox.value”意味着什么,本质上(PHP不严格,所以它做了很多假设)。然而,这并不是因为它假设你引用了一个常量。处理完PHP后,DOM将被处理并发送到浏览器。 PHP在这个时候甚至不存在,并且已经被剥离了DOM(理所当然 - 您永远不希望PHP对客户端可见)。
怎么办:
你可以选择你想要增加/用PHP是同一个文件内减少数值,每次不运行这个PHP代码段(至少在没有表单提交,或某事以“抓住”请求 - 我的回应将基于这样一个事实,即单击时只需要它写入,而不是每次都提交表单)。你必须改变你的代码。我建议的一件事就是把PHP放在它自己的文件中。然后,在增加/减少该值时,您可以使用AJAX实际命中该文件(从而触发文件写入)。
实施例:
的index.html:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
<input id="increaseNumber" type="button" value="+" style="font-size:24pt; width: 50px; height: 50px;"><br>
<input id="textBox" type="text" value="0" style="font-size:24pt; width: 40px; height: 40px;">
<label style="font-size:24pt;">℃</label><br>
<input id="decreaseNumber" type="button" value="-" style="font-size:24pt; width: 50px; height: 50px;"><br>
<script>
$("#decreaseNumber").on("click", function() {
$("#textBox").val(parseInt($("#textBox").val()) -1);
writeToFile($("#textBox").val());
})
$("#increaseNumber").on("click", function() {
$("#textBox").val(parseInt($("#textBox").val()) +1);
writeToFile($("#textBox").val());
})
function writeToFile(value){
$.ajax({
url: 'write.php?v=' + value,
type: 'GET',
dataType: 'json',
success: function(ret){
alert('Success!');
},
error: function(ret){
alert('Error!');
}
});
}
</script>
</body>
</html>
write.php:
<?php
$myfile = fopen("/home/pi/test/test.txt", "w") or die("Unable to open file!");
$txt = "value = " . $_GET['v'];
fwrite($myfile, $txt);
fclose($myfile);
?>
注变迁:
我在我的例子中使用JQuery。如果你想严格使用本地Javascript,我很抱歉。
另请注意,我更改了PHP。您有两次写入,这是不必要的,需要更多时间。文件输入/输出成本很高,应尽量少用。实际上,在这个例子中,我个人只写了一个数据库。然而,你并没有要求单独的解决方案,所以我只是提供了一个类似于你所写的例子。
随想
可以使用的,而不是你在做什么,以及递减/递增。像这样:
<script>
decreaseNumber.onclick = function() {
textBox.value--;
alert(textBox.value);
}
increaseNumber.onclick = function() {
textBox.value++;
alert(textBox.value);
}
</script>
错误,如果有的话?它正在写入该文件吗?检查你的控制台也 –
'$ v = textBox.value;'看起来不像PHP。错误报告也会告诉你。 – Qirel
^真实和错误报告会抛出未定义的常量声明。 http://php.net/manual/en/function.error-reporting.php –