2009-09-30 5 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 : PHP 짧은 태그를 사용

<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 파서 (또는 방화 광구)가 런타임에 HTML의 형식이 잘못되어 코드를 수정하려고 시도했기 때문입니다. 특히 인라인 요소 (<a>) 안에 블록 수준 요소 (<li>)를 넣을 수 없습니다.

<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> 

위의 예는 다음 요소 <a> 전체적으로 블록 레벨 <li> 요소에 중첩 될 유효한 인라인 HTML을 생성한다. 이렇게하면 표준 호환 브라우저에서 페이지의 기능을 수정해야합니다.

+0

잘 설명! 인라인 대 블록 요소 고려 사항을 보지 못했습니다. – Kai

+0

당신이 정확히 맞았습니다. 고마워요. – Rob

0

("<?")는 나쁜 관행으로 간주 될 수있다, 플러스 그들은 PHP에서 제거되고 6

+0

무엇이 잘못 되었나요? http://javascript.about.com/library/blxhtml.htm – Kai

+0

내 잘못으로 고침. CDATA 태그는 내부에서 괜찮습니다