jQuery插件-传递和执行任意函数
我是JQ的新手,所以在这方面的任何帮助都是值得赞赏的,几乎没有剩余的颅骨毛囊受到创伤 我有一个简单的jQuery插件,它使用Ajax使用AppendTo将结果(作为一系列结果)填充到#选择器(UL)中。这是一个跨域调用,所以,据我所知,只支持asych:true 该插件可以工作,但我需要允许用户使用任意函数(即由插件用户确定的函数,如$(“.foo”).draggable()或其他任何函数)点击附加的DOM项,并且在插件之外执行该操作不起作用,因为我们是跨域和异步的 我想我需要在运行时将任意函数传递给插件,但这是我所能做到的。我曾经尝试过delegate()/trigger()和bind(namespcae.bar),但到目前为止还没有成功 这应该如何处理 该呼叫如下所示:jQuery插件-传递和执行任意函数,jquery,ajax,function,plugins,asynchronous,Jquery,Ajax,Function,Plugins,Asynchronous,我是JQ的新手,所以在这方面的任何帮助都是值得赞赏的,几乎没有剩余的颅骨毛囊受到创伤 我有一个简单的jQuery插件,它使用Ajax使用AppendTo将结果(作为一系列结果)填充到#选择器(UL)中。这是一个跨域调用,所以,据我所知,只支持asych:true 该插件可以工作,但我需要允许用户使用任意函数(即由插件用户确定的函数,如$(“.foo”).draggable()或其他任何函数)点击附加的DOM项,并且在插件之外执行该操作不起作用,因为我们是跨域和异步的 我想我需要在运行时将任意函数
$(document).ready(
function () {
$('#targetDiv').myPlugin({ count: 10});
//$(".foo").draggable(); // does not work, because we are async.
});
(function ($) {
$.fn.myPlugin = function (options) {
$.ajaxSetup({ cache: true, async: false }); // false doesn't work - cross domain
var defaults = {count: 5};
var options = $.extend(defaults, options);
return this.each(function () {
var obj = $(this);
$.ajax({
type: 'GET',
async: false,
dataType: 'json',
data: {},
url: 'http://someurl.com?callback=?&otherstuff=somedata',
success: function (data) {
$.each(data.results, function (i, item){
t = $(<LI class='foo'> + item.text </LI>').appendTo(obj);
// this works but may need any arbitrary jQuery.ui function
//t = $(item.text).appendTo(obj).draggable();
// maybe this but not sure how it should be done
//$(t).trigger(ArbitraryEventHandler); ???
该插件如下所示:
$(document).ready(
function () {
$('#targetDiv').myPlugin({ count: 10});
//$(".foo").draggable(); // does not work, because we are async.
});
(function ($) {
$.fn.myPlugin = function (options) {
$.ajaxSetup({ cache: true, async: false }); // false doesn't work - cross domain
var defaults = {count: 5};
var options = $.extend(defaults, options);
return this.each(function () {
var obj = $(this);
$.ajax({
type: 'GET',
async: false,
dataType: 'json',
data: {},
url: 'http://someurl.com?callback=?&otherstuff=somedata',
success: function (data) {
$.each(data.results, function (i, item){
t = $(<LI class='foo'> + item.text </LI>').appendTo(obj);
// this works but may need any arbitrary jQuery.ui function
//t = $(item.text).appendTo(obj).draggable();
// maybe this but not sure how it should be done
//$(t).trigger(ArbitraryEventHandler); ???
(函数($){
$.fn.myPlugin=函数(选项){
$.ajaxSetup({cache:true,async:false});//false不起作用-跨域
var默认值={count:5};
var options=$.extend(默认值,选项);
返回此.each(函数(){
var obj=$(本);
$.ajax({
键入:“GET”,
async:false,
数据类型:“json”,
数据:{},
网址:'http://someurl.com?callback=?&otherstuff=somedata',
成功:函数(数据){
$.each(data.results,function(i,item){
t=$(+item.text ')。附录(obj);
//这可以工作,但可能需要任意jQuery.ui函数
//t=$(item.text).appendTo(obj.draggable();
//也许是这样,但不确定该怎么做
//$(t).trigger(ArbitraryEventHandler)???
这看起来是在jQuery 1.5中使用新的的一个很好的例子(它$.ajax()
可以在后台使用。基本上,它允许您在ajax调用成功完成时排队执行回调(或者在出现错误时被调用)。将回调传递给您的插件。类似于:
$('#targetDiv').myPlugin({ count: 10, callback: function(element){
element.draggable(); // Or whatever you want to do with your item
}});
然后在ajax success中调用此回调,例如:
success: function (data) {
$.each(data.results, function (i, item){
t = $(<LI class='foo'> + item.text </LI>').appendTo(obj);
options.callback(t);
成功:函数(数据){
$.each(data.results,function(i,item){
t=$(+item.text ')。附录(obj);
选项。回调(t);
谢谢你的回答,我想在某个时候看看1.5,我会确定它是否有效(听起来不错)…当其他人发布基本相同的解决方案时,我提出了以下内容,但有点干净…问题解决了,谢谢大家
首先,在DocumentReady块外部创建如下任意函数:
function myArbitraryFunction(t) { // do some work...}
然后向插件选项添加一个选项:
var defaults = {
count: 5,
itemFunction:null};
然后在对插件的调用中,这一点的魔法最终将传递一个指向ArricryFunction的指针作为选项值
$("#targetDiv").myPlugin( { count: 10, itemFunction: function () { my ArbitraryFunction(t) }});
最后在ajax成功代码块中:
success: function (data) {
$.each(data.results, function(i, item){
t = $(<LI class='foo'> + item.text </LI>').appendTo(obj);
// here is the magic !!
if(option.itemFunction != null){
options.itemFunction(t)
}
....
成功:函数(数据){
$.each(data.results,function(i,item){
t=$(+item.text ')。附录(obj);
//这就是魔术!!
if(option.itemFunction!=null){
选项.项函数(t)
}
....
需要连接的部件很多,但到目前为止,它似乎可以工作……非常感谢……看起来我得出了大致相同的答案(见下文),尽管您的电话中的功能看起来更干净……非常感谢!