2012-10-05 25 views
0

我试图返回新数据添加到我的选择标签时,用户选择下拉菜单如何仅附加一次Ajax数据?

obj.prototype.getText=function(){ 
    codes.... 
    call ajax.... 

      ajax.callback=function(data){ 
        $('#option').append(data); 
      } 

     } 

$('#dropdown').on('change', function(){ 
    obj.getText() 
}) 

我的问题是,我只希望当用户单击下拉菜单中第一次附加数据。 只要用户不断点击下拉菜单,我的代码将继续追加更多相同的数据到我的#选项...

有没有办法解决这个问题?非常感谢。

回答

3

使用.one()而不是.on()。它解除绑定本身一旦触发事件一次:

$('#dropdown').one('change', obj.getText); 
+0

哈,这里我推荐一个/次风格功能,但课的的,jQuery的快速可靠的方法它有内置:) +1对你而言 – Bartek

+0

@Bartek:这没什么错。只有一行代码差异。 – Blender

0

您需要打开off处理程序。

这样的事情。

$('#dropdown').on('change', function(){ 
    obj.getText() 
    $('#dropdown').off('change'); 
}) 
1

您可以简单地删除on change事件,所以它不再被触发。

$('#dropdown').off('change'); 

我还会研究“一次运行”命令的概念。这并不是我在这里推荐的内容,但是向前看,这是一件很酷的事。 underscore.js does it well

0

这可能是最好的办法,事件处理程序的启动时,或者你总是可以存储一个布尔值在一个隐藏字段,如

 <input type="hidden" id="hidAleadyAppended" /> 

然后在附加一次后将其设置为true。

这样,如果你需要知道,如果它已经在其他的代码已经追加,也就是检查