在PHP内的HTML表格中的嵌入式PHP内...不会触发

时间:2011-03-27 18:21:06

标签: php jquery

具体问题在这个(非常长的)前导的最后。对不起,我试着让它尽可能短。 (花了一个多小时来写这个问题)。

.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>' ;
        }
}

问题:

  1. 为什么上面的JQuery代码不能正常工作,需要关闭括号?

  2. 在锚标记中创建/更新var的语法是什么,它会保留累积的点击行数据?我问,因为我的许多尝试都破坏了代码。

  3. 在foreach循环之前,var应该在函数顶部初始化吗?

  4. 我尝试使用PHP通过在“return false”之后插入以下代码来创建/更新cookie (见下文)。下面的php代码确实在粘贴到单独的脚本中进行测试时创建一个cookie。)php代码不会触发。为什么?

2 个答案:

答案 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;
    });
});