2010-02-08 4 views
2

간단하게 작성해야하는 페이지의 PHP와 Jquery 코드를 게시하고 있습니다. 이 예제에는 PHP break 함수가 들어 있으며이 페이지의 이름은 test.php입니다.Jquery와 PHP break 함수에 문제가 발생했습니다.

문제는이 페이지의 첫 번째 부분 (사례 1)을 열려고하면 Jquery로드 함수가 성공적으로 시작되어 두 번째 Jquery 코드의 경고 메시지에 대해 동일한 DIV에서 대문자 2를 성공적으로로드합니다. 그러나 FireFox와 Chrome이 메시지를 경고하면 표시되지 않습니다. 왜?

Thx.

compleate 페이지의 코드는 다음과 같습니다

<?php 
include_once '../include/config.inc.php'; 
include_once '../include/options.inc.php'; 
include_once '../include/security.inc.php'; 
include_once '../include/functions.inc.php'; 
include_once '../templates/config.php'; 
?> 
<script type="text/javascript" src="jquery/jquery-1.3.2.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
$("#one").live("click", function(){ 
$("#xuy").load("test.php?x=2"); 
}); 
}); 
</script> 
<script type="text/javascript"> 
$(document).ready(function() { 
$('#test').click(function() { 
    alert("test for alert message"); 
    }); 
}); 
</script> 

<style> 
#xuy{ width:770px; height:230px; border:1px solid #999; background-color:#33FF00;} 
#one{ border:1px solid #F00; width:555px; background-color:#FFFF00;} 
#two{ border:1px solid #000; width:355px; background-color:#CCCCCC;} 
#three{ border:1px solid #ccc; width:255px; background-color: #00FFFF;} 
</style> 
<? 
if (!isset($x)) $x = ''; 
switch ($x) 
{ 
default: 
case 1: 
?> 
<div id="xuy"><div id="one">DIV one</div></div> 
<? 
break; 
case 2: 
?> 


<div id="two">DIV two</div><br> 
<div id="test">click for Jquery alert</div> 


<? 
} 
?> 
+1

작동하지 않는 완성 된 HTML 코드를 표시하십시오. 해석되지 않은 원본 코드에서 최종 결과에 잘못된 점을 지적하는 것은 어렵습니다. –

답변

1

나는 문제가 휴식하지 생각하지만 다음

먼저 페이지를 열 때 $ (문서). 준비 처리기가 해고됩니다. 이 핸들러에서 이벤트 $ ('# test')에 바인딩하려고 시도합니다. 클릭하지만 #test는 아직 존재하지 않습니다!

은 그럼 당신은 호출하여 두 번째 페이지를로드

$("#xuy").load("test.php?x=2");

이는 AJAX 호출을 시작하고 DIV는 "xuy"라고에 결과를 삽입합니다. $ (document) .ready를 HTML에 다시 삽입하지만 문서가 이미 준비되어 있으므로 처리기가 호출되지 않습니다. 그래서 귀하의 이벤트 처리기는 $ ('# test'). 클릭 ist 연결되어 있지 않습니다! 난 당신이 jQuery의 live 이벤트 핸들러를 사용한다고 생각

<div id="two">DIV two</div><br> 
<div id="test">click for Jquery alert</div> 
<script> 
    $('#test').click(function() { 
    alert("test for alert message"); 
    }); 
    }); 
</script> 
1

:

당신은 같은로드 된 파일의 태그 안에이 작업을 수행해야합니다.

click은 페이지로드가 완료 될 때 DOM에있는 요소에만 바인딩됩니다. 당신은 나중에에서 DOM에 div#test를 추가, 그래서 당신은 하나 live를 사용하거나 단지 그것은 생성 된 소스를 보지 않고 무슨 일이 일어나고 있는지 알려 어려운 두 번째 DIV

0

를로드 한 후 click 이벤트를 바인드해야하지만, 내가 볼 생각 몇 가지 문제 :

  • 두 번째 스위치 케이스에 break 문이 없습니다.
  • 클릭 이벤트를 초기 페이지로드에 존재하지 않는 $('#test')에 바인딩하고 있습니다. 대신 live()을 사용해보십시오.
  • "xuy"div에로드하는 콘텐츠가이 전체 페이지이며 자바 스크립트 코드로 완성 된 것 같습니다. 이는 페이지에 중복 된 코드를 다시 도입한다는 것을 의미하며 이는 혼란 스러울 수 있습니다.
1

default:switch 진술은 항상 마지막에 와야합니다. 귀하의 switch 성명 끝으로 이동하십시오.

default:은 포괄적 인 사례이며 파서는 그다지 일치하지 않으면 해당 사례를 항상 실행합니다.

switch documentation

+0

고마워. (Tarnschaf가 쓴) 이제 (piquadrat가 쓴) 2. 내가 jQuery의 라이브 이벤트 핸들러를 사용할 필요가 1. 내가로드 된 파일의 태그 안에 핸들러를 호출 할 필요가 모든 것을 : 문제는 그 두 가지를 함께했다 훌륭하게 작동합니다. 다시 한 번 감사드립니다. 신의 축복이 가득합니다 :) – Sergio

+0

그래서이 대답을 받아 들여야합니다 ... 옆에있는 체크를 클릭하십시오 –

+0

@ 마크, 푸시 접수에 감사드립니다. 나는 그가 이미 이사 왔다고 생각 : - / – matpie

0

이 벌금없이 오류를 작동하고 전체 코드입니다.
다시 한 번 감사드립니다!

<?php 

include_once '../include/config.inc.php'; include_once '../include/options.inc.php'; include_once '../include/security.inc.php'; include_once '../include/functions.inc.php'; include_once '../templates/config.php'; ?>

$ (문서) .ready (함수() { $ ("# 하나"). 살 ("클릭", 기능() { $ ("#의 xuy"). 부하 ("t.php? x = 2"); }), }); jQuery를 알리기 위해 DIV 하나

DIV 두

클릭 $ ('# 테스트'). 살 ('클릭', '경고 메시지에 대한 시험 "기능() { 경고 (), });
관련 문제