2011-03-27 46 views
2

具体的问题在这个(非常长的)前导码的末尾。对不起,我试图让它尽可能短。 (花了一个多小时才写出问题)。PHP内的HTML表格内的嵌入式php ...不会触发

.php文件使用(php)函数读取SQL数据库中的行并动态创建HTML表。

对于每一行,该SQL数据经由$book['id']$book['code']$book['description']返回等

的$书[“代码”]是一个两字符的字母数字标识,例如。 B7或DW

在每行的HTML中,有一个<td></td>,其中包含一个具有运行JQuery脚本(显示/隐藏该行的元素)的onclick = event的锚标记。

假设一对夫妇或行点击了一对夫妇的元素被嵌入的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. 什么是创建/更新变种,在锚标记语法,这将保持累计点击行的数据?我问,因为我的许多尝试都破坏了代码。

  3. 如果该变种在函数的顶部被初始化,foreach循环之前?

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

+1

如果你将php和jquery代码分开,它可能会更容易。而不是在标签中写入onclick,只需添加并在类文件中添加并注册click事件...可能会使调试变得更容易。 – 2011-03-27 18:35:17

回答

1

的答案是:

1)仍不能确定,只是语法。

2)正如Q4中提到的那样,我在“返回false”之后输入了代码。声明,这是什么结束 onclick事件。因此,在之后放置的任何代码“返回false”;不会作为onclick事件的一部分发射......并且除此之外没有其他任何事情可以使它火起来。

3)无关

4a)的上面的代码是一个PHP代码块中创建的。 - 一个不能创建内部JQuery的一个PHP代码块内正被(即已经内侧)PHP创建的HTML。 )进一步回答(2),我的alert()测试不会触发,因为他们遵循“返回false”;声明, 4c。)任何新的PHP代码必须从HTML中移出并放回到PHP的其余部分,例如函数(render_row_from_mysql){}之上。

现在是“回到绘图板”来弄清楚如何在用户离开此页面和回到它之间时保留“单击的项目”数据。目前,我怀疑这会是某种FORM $ POST事件,但在我不确定它会是什么样子之前从未做过。

0

我完全22分钟前比约恩的评论表示赞同。您需要删除所有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; 
    }); 
}); 
+0

非常感谢这个想法,特别是留下你的答案。发布后我立即被称为afk,并且在发布后的关键时刻没有得到与响应者互动的机会。 – user674073 2011-03-27 22:31:46