我有一个PHP函数,它接受两个日期并返回它们之间的工作日数(包括假期,因为我们支付了这些日期)。现在,我可以在Javascript函数中调用此函数,如果我发送函数实际日期,则返回一个值。例如:
function daycount() {
var days="<?php echo getDays("01/01/2014","01/31/2014"); ?>";
document.write(days);
}
按预期返回23。我希望发生的是用户能够将开始和结束日期放在两个字段中,然后将这些字段值提供给上面的函数,显示结果而无需用户提交表单。像这样:
<label for="startDate">Start</label>
<input type="text" name="startDate" id="startDate" onFocus="daycount();" />
<label for="endDate">End</label>
<input type="text" name="endDate" id="endDate" onFocus="daycount();" />
这可能吗?
答案 0 :(得分:2)
您不需要PHP,因为您可以使用JavaScript完成所有这些操作。但是,如果你想使用PHP,你可以使用jQuery中的AJAX这样做:
输入字段:
<input type="text" name="startDate" id="startDate">
<input type="text" name="endDate" id="endDate">
jQuery的:
$('form').submit(function(event) {
var start = $('#startDate').val();
var end = $('#endDate').val();
$.ajax({
type: 'POST',
url: 'date.php',
data: {
startDate: start,
endDate: end
},
success: function(data) {
$('#result').text(data);
}
});
event.preventDefault();
});
date.php:
<?php
// You getDays function here
echo getDays($_POST['startDate'], $_POST['endDate']);
?>
答案 1 :(得分:1)
PHP发生在服务器端,Javascript发生在客户端。 这意味着您的PHP脚本在javascript运行之前发生。 你不能只从Javascript函数调用PHP函数,因为它们发生在不同的时间。
实现您的请求的最佳方法是使用Ajax在您的Javascript脚本和PHP脚本之间进行通信。 另一种选择是使用表单发布,但这不是'web 2.0'......
Ajax请求看起来像这样(使用jQuery):
$.ajax({
url: "script.php",
method:'POST'
})
.success(function( data ) {
//do your thing here with the returned data
});
你的主要代码看起来与此相似:
function daycount() {
$.ajax({
url: "script.php",
method:'POST',
data: {var1:'',var2:'', etc etc}
})
.success(function( data ) {
var days = data;//depending on how you return the data from the php script
document.write(days);
});
}
希望这有帮助!
答案 2 :(得分:1)
我会使用jQuery $ .post发送两个日期到php脚本,它应该返回答案,例如:
HTML:
<form id='days_form'>
<input name='date_one' /> - <input name='date_two'/>
<input type='button' id='sendBtn'>
</form>
<span id='answer'></span>
JavaScript的:
$('#sendBtn').click(function{
$.post('php_script_file.php', $('#days_form').serialize(), function(data){
$('#answer').html(data);
});
});
PHP文件:
print getDays("$_POST['date_one']", $_POST['date_two']);
答案 3 :(得分:-1)
不是这样的。您必须了解的是,当php从服务器呈现页面时,javascript部分被写为
function daycount() {
var days="23";
document.write(days);
}
这就是它工作的原因。在呈现之后,如果您希望功能有效,那么有两种方法。
第一个 - 如果你只想从后端(php)完成它,那么你需要进行ajax调用并获得结果。
第二个 - 如果您希望在客户端完成,您应该转换用getDays($a,$b);
Javascript编写的业务登录。
对于javascript日期功能,请尝试使用moment.js