2009-09-30 81 views
2

我讀書開始CakePHP的,並讓這個你可以對評論進行投票,它會告訴你創建一對夫婦AJAX鏈接:

<?=$ajax->link('<li>up</li>', 
         '/comments/vote/up/'.$comment['Comment']['id'], 
         array('update' => 'vote_'.$comment['Comment']['id']), 
         null, false);?> 
<?=$ajax->link('<li>down</li>', 
         '/comments/vote/down/'.$comment['Comment']['id'], 
         array('update' => 'vote_'.$comment['Comment']['id']), 
         null, false);?> 

能正常工作在IE,但在FF它不」不要做任何事情。它甚至沒有達到控制器或模型,因爲它產生的鏈接不會做任何事情。

它會產生這樣看起來HTML:

<a id="link2128392960" onclick=" event.returnValue = false; return false;" href="/blog/comments/vote/up/1"/> 
<li> 
    <a id="link2128392960" onclick=" event.returnValue = false; return false;" href="/blog/comments/vote/up/1">up</a> 
</li> 
<script type="text/javascript"> 
    //<![CDATA[ 
    Event.observe('link2128392960', 'click', function(event) { new Ajax.Updater('vote-1','/blog/comments/vote/up/1', {asynchronous:true, evalScripts:true, requestHeaders:['X-Update', 'vote-1']}) }, false); 
    //]]> 
</script> 

回答

4

首先,您粘貼HTML輸出是不準確的。它看起來像你從Firebug或其他東西,而不是你的瀏覽器實際'查看源代碼'頁複製。在這種情況下,CakePHP實際上並不生成自閉合錨標籤(<a />而不是<a></a>),就像您的示例所示。

我相信這指出了你的問題,但。事實上,您的瀏覽器的HTML解析器(或Firebug's)試圖在運行時更正代碼,指向您的HTML格式不正確。具體來說,不能將塊級元素(<li>)放入內聯元素(<a>)中。

<div class="actions"> 
    <ul> 
     <li> 
      <?php echo $ajax->link('up', array(
       'controller' => 'comments', 
       'action' => 'vote', 
       'up', 
       $comment['Comment']['id'] 
      ), array(
       'update' => 'vote_' . $comment['Comment']['id'] 
      ), null, false); ?> 
     </li> 
     <li> 
      <?php echo $ajax->link('down', array(
       'controller' => 'comments', 
       'action' => 'vote', 
       'down', 
       $comment['Comment']['id'] 
      ), array(
       'update' => 'vote_' . $comment['Comment']['id'] 
      ), null, false); ?> 
     </li> 
    </ul> 
</div> 

以上的例子會產生有效的HTML作爲直列<a>元件將被完全嵌套塊級<li>元件內。這應該有望在符合標準的瀏覽器中修復您的頁面功能。

+0

很好解釋!我沒有看到內聯對塊的考慮因素。 – Kai 2009-09-30 17:43:46

+0

你完全正確,謝謝。 – Rob 2009-10-01 07:41:53

0

使用PHP短標記( 「<?」)可以被認爲是不好的做法,再加上他們是在PHP中被刪除6.

+0

這是怎麼回事? http://javascript.about.com/library/blxhtml.htm – Kai 2009-09-30 15:21:54

+0

我的不好,修復。 CDATA標籤在