jquery问题在加载时添加事件

时间:2009-07-16 17:05:29

标签: javascript jquery javascript-events

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

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上测试这个

3 个答案:

答案 0 :(得分:1)

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

$("#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();
});

答案 1 :(得分:0)

为什么不喜欢这个?

function map(){
 return {
  me = this,
  addMapTriggers: function(){
    $("#map_form select").change(getDataWithinBounds);
  },
  init: function(){
   getDataWithinBounds();
   me.addMapTriggers();
  }
 };
}();

答案 2 :(得分:0)

我现在很尴尬,我为浪费每个人的时间而道歉。当然上面的代码是有效的,我正在做的是我的网站正在使用jquery selectbox插件,它通过创建一个带有点击事件的UL来选择样式,以便像选择一样(不是我的选择,相信我)不幸的是,我在应用selectbox代码之前调用init ,而selectbox代码本身改变了选择的绑定。首先调用selectbox,然后调用map.init()完全修复它。

很多道歉并非常感谢(特别是SolutionYogi)花时间帮助我。