gpt4 book ai didi

javascript - jQuery 插件、上下文和 setTimeout

转载 作者:行者123 更新时间:2023-11-30 18:48:47 24 4
gpt4 key购买 nike

我正在为 jQuery 编写一个插件,但我脑子里乱七八糟的是 javascript 中的上下文问题。

这是我的插件的简化版本:

(function($){  

$.fn.myplugin = function(options){
return new MyPlugin(this, options);
};


function MyPlugin(el, o )
{
this.root = el;
this.input_box = el.find('#the_input');
this.map = null;
this.timeout = null;
var self = this;

self.input_box.keyup( function(){
if( self.timeout!==null )
{
clearTimeout( self.timeout );
}
self.timeout = setTimeout( function(){
self.search_address( self );
}, 500 );
});
}

MyPlugin.prototype = {

search_address : function( context ){
geocoder.geocode({'address':$('#direction').val()},
function( results, status ){
var lat = results[0].geometry.location.lat();
var lng = results[0].geometry.location.lng();
var latlng = new google.maps.LatLng( lat, lng );

context.select_address( latlng, '' );
},

select_address : function( latlng, text ){
self.root.find('#url').val('http://maps.google.com/?q='+encodeURI($('#direccion').val())+'&ll='+coords.lat()+','+coords.lng()+'&ie=UTF8&oe=UTF8&z=18');
}
};
})(jQuery);

我读过 setTimeout 将上下文设置为全局对象,所以我做了闭包以便能够将上下文传递给 search_address 函数。这让我可以从 geocode 函数的回调中调用 select_address,但是这个回调正在调用 select_address 并且上下文再次不受欢迎:self.root 未找到。

我完全不知道如何处理上下文,我虽然在“对象”的初始化时使用 var self=this 我会避免这些问题......

我必须注意 select_address 可以直接调用...

最佳答案

此时使用 this 来引用当前上下文:

select_address : function( latlng, text ){
this.root.find('#url').val('http://maps.google.com/?q='+encodeURI($('#direccion').val())+'&ll='+coords.lat()+','+coords.lng()+'&ie=UTF8&oe=UTF8&z=18');
}

关于javascript - jQuery 插件、上下文和 setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4587561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com