2011-05-05 29 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); 
     } 
    ); 
});