2011-05-05 4 views
0

배열에 넣어 코드를 최소화하려고하지만 아무 일도 일어나지 않습니다. 내가 뭘 잘못하고 있는지 알 수 없다. 여기에 여기에 코드를변경시 select with jQuery array()

<html> 
    <head> 

    <title>test</title> 

    <!-- JavaScript --> 
    <script src="js/jquery-1.5.2.js" type="text/javascript"></script> 
    <script type="text/javascript"> 

     var phpfile = new Object(); 
     phpfile["testselect"] = "zoomchange.php"; 


     var elementID = new Object(); 
     elementID["testselect"] = "#testdiv"; 

     $(document).ready(function(){ 

      $("select").change(function() { 
       $.post(
       phpfile[$(this).id()], 
       $(this).serialize(), 
       function(data) { 
        $(elementID[$(this).id()]).html(data) 
       } 
      ); 

      }); 

     }); 

    </script> 

    </head> 

    <body> 


    <select id="testselect"> 
     <option value="1">1</option> 
     <option value="2">2</option> 
    </select> 

    <div id="testdiv"></div> 

    </body> 
</html> 

을 년대 zoomchange.php입니다 :

<?PHP echo $_REQUEST['testselect'] ; ?> 
+0

왜 3 번'DOCTYPE' ?? – diEcho

+0

Firebug/Dev 도구의 모든 종류의 오류가 있습니까? –

+1

먼저 doctype 하나를 선택하고 주석을 삭제해야하며 코드를 최소화하려고하지 말고 명확하고 읽기 쉽도록하십시오. – Nemoden

답변

0

당신은 new Object() 대신 new Array()을해야한다. 편집 :

<script type="text/javascript"> 
     var phpfile = {}; 
     phpfile["testselect"] = "zoomchange.php"; 

     var elementID = {}; 
     elementID["testselect"] = "#testdiv"; 

     $(document).ready(function(){ 

      $("select").change(function() { 
       var $select = $(this); 
       $.post(
       phpfile[$select.attr("id")], 
       $select.serialize(), 
       function(data) { 
        $(elementID[$select.attr("id")]).html(data) 
       } 
      ); 

      }); 
     }); 
</script> 
+0

new Array()가 괜찮습니다. – ariel

+0

@ariel 자바 스크립트 배열에 해시 테이블을 저장하는 것은 나쁜 습관입니다. 객체에 있어야합니다. –

+0

cool. 하지만 그건 오류가 아니었다. 아마 'this'가 아약스 콜백 내에서 참조가되었다. – ariel

0

대신이

 
function(data) 
{ 
    $(elementID[$(this).id()]).html(data) 
} 

 
function(data) 
{ 
    $(elementID[$(this).id()]).html(data); 
} 

이 오류가이 : 다른 실수가있다, 당신의 JS 코드이되어야 하는가? 같이 안

+1

JavaScript는 세미콜론 명령 터미네이터가 필요하지 않습니다. 자바 스크립트에서 –

+0

전에 세미콜론을 사용}}은 선택 사항입니다. – ariel

+0

오. 나를 알게 해줘서 고마워. :) –

2

귀하의 초기화 :

var phpfile = new Array(); 
phpfile["testselect"] = "zoomchange.php"; 

var elementID = new Array(); 
elementID["testselect"] = "#testdiv"; 

자바 스크립트 배열을 숫자가 아닌 문자열에 의해 색인이 생성됩니다.

var phpfile = { testselect: 'zoomchange.php' }; 
var elementED = { testselect: '#testdiv'  }; 

그런 다음 POST 콜백이 혼란 :

function(data) { 
    $(elementID[$(this).id()]).html(data) 
} 

this 당신이 그 함수가 호출 될 때 그것이 생각하지 않습니다 당신은 간단한 객체 리터럴을합니다. 당신은 다음과 같은 것을 원합니다 :

$("select").change(function() { 
    var that = this; 
    $.post(
     phpfile[that.id], 
     $(this).serialize(), 
     function(data) { 
      $(elementID[that.id]).html(data); 
     } 
    ); 
});