2011-05-05 36 views
0

我想盡量減少我的代碼,將其放入數組中,但沒有任何反應。我無法弄清楚我做錯了什麼。下面的代碼jQuery數組()與選擇更改

<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 2011-05-05 05:15:36

+0

來自Firebug/Dev工具的任何錯誤? – 2011-05-05 05:15:40

+1

首先您需要選擇一個文檔類型並刪除評論,並且不要儘量減少您的代碼,但要使其清晰可讀。 – Nemoden 2011-05-05 05:17:01

回答

0

你應該做new Object()而不是new Array()編輯:還有其他的錯誤,你的js代碼應該是這樣的:

<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 2011-05-05 05:35:08

+0

@ariel,在JavaScript數組中存儲哈希表是一個糟糕的做法,它們必須在對象 – 2011-05-05 05:38:38

+0

很酷..不知道。但這不是錯誤,可能是在'ajax回調內部'this'的引用 – ariel 2011-05-05 05:39:51

0

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

,而不是這個

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

這是錯誤?

+1

JavaScript不需要分號語句終結符(即使你真的應該使用它們)。 – 2011-05-05 05:33:04

+0

在javascript分號之前}是可選 – ariel 2011-05-05 05:34:31

+0

ohh。謝謝你讓我知道:) – 2011-05-05 05:37:09

2

你的初始化不應該是這樣的:

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

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

JavaScript數組是數字,而不是字符串索引。你想簡單的對象文字:

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); 
     } 
    ); 
});