单击时给变量另一个值
On click give variable another value
我正在尝试为页面实现分页功能。我有自定义的 post 类型,我已经遍历并收集了该页面的所有 post。我显示第一个 post 并隐藏其余的,我有 next/previous 按钮将显示下一个 post 并隐藏当前 post。它似乎在工作,但是我无法查看所有 posts - 只有其中的 2 个。
这是我的代码:
<?php
$currProj = 1;
$countposts = 3;
?>
<?php if ($countposts>1) {
$prevID = $currProj - 1;
if ($prevID <= 0) {
$prevID = $countposts;
?>
<a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>
<?php } else {
?>
<a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>
<?php
//$currProj = $prevID;
}
echo $currProj; //This outputs 3 where it should be 1
$nextID = $currProj + 1;
if ($nextID > $countposts) {
$nextID = 1;
?>
<a class="btn-next" id="nextlink" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $nextID; ?>')" onclick="<?php $currProj=$nextID; ?>"> Next > </a>
<?php } else {
?>
<a class="btn-next" id="nextlink" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $nextID; ?>')" onclick="<?php $currProj=$nextID; ?>"> Next > </a>
<?php
//$currProj = $nextID;
}
} ?>
javascript 函数工作正常,问题似乎出在 $currProj 变量上。我认为问题出在标签中的 onClick 属性 - 是否有更好的方法让 onClick 事件为我的变量提供不同的值?或检查此 link 是否已被单击的方法,然后为 currProj 提供 prevID/nextID 的值?
我已经被困在这个问题上一段时间了,但我似乎一无所获。任何帮助将不胜感激。
如何创建一个 HTML 隐藏输入来存储这些值?
<input type="hidden" value="<?php echo $currProj ?>" id="currProj">
因此您可以使用 javascript 或 jQuery 在客户端访问并修改它。如果您想要服务器端的解决方案,您可以使用 ajax 和 POST 或 GET 请求。
也许这不是您要查找的内容(修改 php 属性),我误解了您的意思。如果您遇到这种情况,请告诉我。
您上面的代码似乎混淆了服务器端发生的事情和客户端发生的事情。 <?php
... ?>
中包含的任何内容都将在服务器上执行,然后作为 HTML 发送到客户端——例如,这一行:
<a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>
最终将与所有 PHP 解释的内容一起发送给客户端:
<a class="btn-previous" href="javascript:showProject(1,3)" onclick=""> < Previous </a>
这里的关键是当你点击时你不是重新运行 PHP——客户端完全不知道PHP 去过那里。每次点击 Previous 按钮,它的 href
属性仍然是 javascript:showProject(1,3)
.
你有两个选择;也就是说,您可以返回到服务器并让它在您单击下一个/上一个按钮时重新呈现页面,方法是将这些变量作为参数包含到您的页面中,例如,从 URL 和 link 像这样:
$currProj = ( $_REQUEST['currProj'] ? $_REQUEST['currProj'] : 1 );
...
<a class="btn-previous" href="<?php echo '[your_url_here]?currProj=' . $prevID ?>">
但是,您似乎有兴趣在不再次 ping 服务器的情况下执行此操作。在这种情况下,您需要在 javascript 中存储、引用和更新这些变量。可能有上千种方法可以做到这一点;您似乎想要做的事情的结束是让您的 showProject
函数不带任何参数,而是根据当前项目的价值找出它需要做什么,比如
var currProj = <?php echo $currProj; ?>; // this initializes the JS variable currProj from whatever it is in PHP when the server sends the page contents
var countposts = <?php echo $countposts; ?>; // initialize this too
var showPrevProject = function showPrevProject() {
// hide the current project using jQuery; assumes the DOM element you want to hide is given ID #project-[currProj]
$('#project-' + currProj).hide();
// Update the current project variable in JS; scope should update globally
currProj = currProj - 1;
if (currProj === 0) { currProj = countposts; }
// Now show that element
$('#project-' + currProj).show();
}
然后在您的 link 中您可以根据需要使用 showNextProject
或 showPrevProject
。
不过,更一般地说,最好将您的 javascript 作为一个单独的文件并注册事件处理程序来处理此类事情。我还建议查看 jQuery,这是一个功能强大的库,可以大大简化访问和操作 DOM 元素的过程。
我正在尝试为页面实现分页功能。我有自定义的 post 类型,我已经遍历并收集了该页面的所有 post。我显示第一个 post 并隐藏其余的,我有 next/previous 按钮将显示下一个 post 并隐藏当前 post。它似乎在工作,但是我无法查看所有 posts - 只有其中的 2 个。
这是我的代码:
<?php
$currProj = 1;
$countposts = 3;
?>
<?php if ($countposts>1) {
$prevID = $currProj - 1;
if ($prevID <= 0) {
$prevID = $countposts;
?>
<a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>
<?php } else {
?>
<a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>
<?php
//$currProj = $prevID;
}
echo $currProj; //This outputs 3 where it should be 1
$nextID = $currProj + 1;
if ($nextID > $countposts) {
$nextID = 1;
?>
<a class="btn-next" id="nextlink" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $nextID; ?>')" onclick="<?php $currProj=$nextID; ?>"> Next > </a>
<?php } else {
?>
<a class="btn-next" id="nextlink" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $nextID; ?>')" onclick="<?php $currProj=$nextID; ?>"> Next > </a>
<?php
//$currProj = $nextID;
}
} ?>
javascript 函数工作正常,问题似乎出在 $currProj 变量上。我认为问题出在标签中的 onClick 属性 - 是否有更好的方法让 onClick 事件为我的变量提供不同的值?或检查此 link 是否已被单击的方法,然后为 currProj 提供 prevID/nextID 的值?
我已经被困在这个问题上一段时间了,但我似乎一无所获。任何帮助将不胜感激。
如何创建一个 HTML 隐藏输入来存储这些值?
<input type="hidden" value="<?php echo $currProj ?>" id="currProj">
因此您可以使用 javascript 或 jQuery 在客户端访问并修改它。如果您想要服务器端的解决方案,您可以使用 ajax 和 POST 或 GET 请求。
也许这不是您要查找的内容(修改 php 属性),我误解了您的意思。如果您遇到这种情况,请告诉我。
您上面的代码似乎混淆了服务器端发生的事情和客户端发生的事情。 <?php
... ?>
中包含的任何内容都将在服务器上执行,然后作为 HTML 发送到客户端——例如,这一行:
<a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>
最终将与所有 PHP 解释的内容一起发送给客户端:
<a class="btn-previous" href="javascript:showProject(1,3)" onclick=""> < Previous </a>
这里的关键是当你点击时你不是重新运行 PHP——客户端完全不知道PHP 去过那里。每次点击 Previous 按钮,它的 href
属性仍然是 javascript:showProject(1,3)
.
你有两个选择;也就是说,您可以返回到服务器并让它在您单击下一个/上一个按钮时重新呈现页面,方法是将这些变量作为参数包含到您的页面中,例如,从 URL 和 link 像这样:
$currProj = ( $_REQUEST['currProj'] ? $_REQUEST['currProj'] : 1 );
...
<a class="btn-previous" href="<?php echo '[your_url_here]?currProj=' . $prevID ?>">
但是,您似乎有兴趣在不再次 ping 服务器的情况下执行此操作。在这种情况下,您需要在 javascript 中存储、引用和更新这些变量。可能有上千种方法可以做到这一点;您似乎想要做的事情的结束是让您的 showProject
函数不带任何参数,而是根据当前项目的价值找出它需要做什么,比如
var currProj = <?php echo $currProj; ?>; // this initializes the JS variable currProj from whatever it is in PHP when the server sends the page contents
var countposts = <?php echo $countposts; ?>; // initialize this too
var showPrevProject = function showPrevProject() {
// hide the current project using jQuery; assumes the DOM element you want to hide is given ID #project-[currProj]
$('#project-' + currProj).hide();
// Update the current project variable in JS; scope should update globally
currProj = currProj - 1;
if (currProj === 0) { currProj = countposts; }
// Now show that element
$('#project-' + currProj).show();
}
然后在您的 link 中您可以根据需要使用 showNextProject
或 showPrevProject
。
不过,更一般地说,最好将您的 javascript 作为一个单独的文件并注册事件处理程序来处理此类事情。我还建议查看 jQuery,这是一个功能强大的库,可以大大简化访问和操作 DOM 元素的过程。