具体问题在这个(非常长的)前导的最后。对不起,我试着让它尽可能短。 (花了一个多小时来写这个问题)。
.php文件使用(php)函数读取SQL数据库中的行并动态创建HTML表。
对于每一行,SQL数据都通过$book['id']
,$book['code']
,$book['description']
等返回。
$ book ['code']是一个双字母字母数字ID,例如。 B7或DW
在每行的HTML中,<td></td>
包含一个带有onclick =事件的锚标记,该事件运行JQuery脚本(显示/隐藏该行的元素)。
假设点击了一对或几行,并且嵌入式JQuery脚本隐藏了一些元素(顺便说一句,这是正常工作的)
当用户查看不同的页面然后返回到此页面时,隐藏的元素(由JQuery脚本隐藏)不再被隐藏。
我希望为每个单击的行保留一串$book['code']
值,并在返回第一页后解析该字符串以重置隐藏的元素。
<?php
function render_row_from_mysql() {
$output .= '
...create header row...
foreach ($books as $book)
{
create table row cells 1, 2, 3, 4
after cell 4:
<td>
<a id="addToShelf.php" onclick="
jQuery.ajax(\'./addToShelf.php?id='.$book['id'].'ats'.'\');
jQuery(addToShelfLink'.$book['id'].')[0].style.display = \'none\';
jQuery(rfs'.$book['id'].')[0].style.display = \'block\';
jQuery(mt'.$book['id'].')[0].style.display = \'none\';
jQuery(grn'.$book['id'].')[0].style.display = \'block\';
return false;
">
add to bookshelf
</a>
</td></tr>' ;
}
}
问题:
为什么上面的JQuery代码不能正常工作,需要关闭括号?
在锚标记中创建/更新var的语法是什么,它会保留累积的点击行数据?我问,因为我的许多尝试都破坏了代码。
在foreach循环之前,var应该在函数顶部初始化吗?
我尝试使用PHP通过在“return false”之后插入以下代码来创建/更新cookie (见下文)。下面的php代码确实在粘贴到单独的脚本中进行测试时创建一个cookie。)php代码不会触发。为什么?
答案 0 :(得分:1)
答案是:
1)仍然不确定,只是语法。
2)如第4季所述,我在“返回假”之后输入了代码。声明,这是结束 onclick事件。因此,任何代码在之后“返回false”;不会作为onclick事件的一部分发射......并且没有别的东西让它发射。
3)不相关
4a。)上面的代码是在PHP代码块中创建的 - 人们无法在PHP内部的JQuery内部创建PHP代码块(即已经在PHP中创建)。 4b。)继续回答(2),我的alert()测试不会触发,因为它们遵循“return false;”声明, 4c。)任何新的PHP代码都必须移出HTML并放回PHP的其余部分,例如函数(render_row_from_mysql){}上方。
现在“回到绘图板”来弄清楚如何在用户离开此页面和返回到该页面之间保留“点击的项目”数据。在这个时候,我怀疑这将是一种FORM $ POST事件,但在我不确定它会是什么之前从未做过一次。
答案 1 :(得分:0)
我完全同意22分钟前的Bjorn评论。您需要删除所有onclick代码并向锚标记添加标识类。您还确保每个HTML元素都具有唯一ID,这是W3C验证要求。如果每本书的ID都是系统范围内唯一的,我会使用它,请参阅下面的示例:
<?php
function render_row_from_mysql() {
$output .= '
foreach ($books as $book)
{
//create table row cells 1, 2, 3, 4
//after cell 4:
<td>
<a id="'.$book['id'].'" class="addToShelf">
add to bookshelf
</a>
</td></tr>' ;
}
}
将此javascript代码添加到HTML代码的底部。
jQuery(document).ready(function($) {
// bind event to all anchor tags with class addToShelf
$('a.addToShelf').click(function() {
var book_id = this.id;
$.ajax('addToShelf.php?id='+book_id, function() {
// execute code after the ajax request is complete...
$('addToShelfLink'+book_id).hide();
$('rfs'+book_id).show();
$('mt'+book_id).hide();
$('grn'+book_id).show();
});
return false;
});
});