我在使用以下代码注册“更改”事件时遇到问题
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上测试这个
答案 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)花时间帮助我。