2011-03-27 40 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