2

我在使用以下代码注册“更改”事件时遇到问题

var map = function(){

  function addMapTriggers(){
    $("#map_form select").change(getDataWithinBounds);
  }

 return{
  init: function(){
   getDataWithinBounds();
   addMapTriggers();
  }
 };
}();

并在 jquery document.ready

$(function(){
  map.init();
});

所以我得到了我的初始数据,然后每次我更改其中一个选择时,我都会再次获得地图数据(getDataWithinBounds 发送一个 ajax 调用)。问题是,它不起作用,永远不会添加更改事件。

但是,如果在控制台中输入 map.init(); 它确实有效。这很奇怪,我不明白有什么区别?我在这里想念什么?我正在以完全相同的行为在 safari 和 firefox 上对此进行测试

4

3 回答 3

1

'map_form' id 是您选择的吗?如果是,那么你应该这样做

$("#map_form").change(getDataWithinBounds);

'#map_form select' 将尝试将更改事件连接到 #map_form 指定的元素中存在的所有选择。

编辑:

注意到另一件事,map.init 并不真正存在。

在您的代码中, map 是一个命名函数,它会立即执行,它返回一个具有 init 方法的对象。这并不意味着 'map' var 具有 init 方法。

你想尝试这样的事情,

var map = function()
{

    function addMapTriggers()
    {
        $("#map_form select").change(getDataWithinBounds);
    }

    return {
        init:  function()
               {
                    getDataWithinBounds();
                addMapTriggers();
            }
    };
}();

在上面的代码中,您运行一个匿名函数,该函数返回一个具有 init 方法的对象并将结果分配给 map。现在 map 对象将具有 init 方法,您可以这样做:

$(function()
{
  map.init();
});
于 2009-07-16T17:26:29.083 回答
0

为什么不这样?

function map(){
 return {
  me = this,
  addMapTriggers: function(){
    $("#map_form select").change(getDataWithinBounds);
  },
  init: function(){
   getDataWithinBounds();
   me.addMapTriggers();
  }
 };
}();
于 2009-07-16T17:16:17.620 回答
0

我现在很尴尬,我很抱歉浪费了大家的时间。当然,上面的代码有效,我所做的不同之处在于我的网站使用的是 jquery 选择框插件,它通过创建带有点击事件的 UL 来设置选择的样式,就像选择一样(不是我的选择,相信我)不幸的是,我在应用选择框代码之前调用了 init,它本身会改变选择的绑定。先调用选择框,然后调用 map.init() 完全修复它。

非常抱歉并非常感谢(尤其是SolutionYogi)抽出时间帮助我。

于 2009-07-17T01:32:54.910 回答