JavaScript函数传递?

JavaScript函数传递?,javascript,jquery,jquery-ui,javascript-events,Javascript,Jquery,Jquery Ui,Javascript Events,我不确定这是否可行,但我希望能够将jQueryUI事件(直接)设置为函数,而不是继续包装在附加的function(event,UI){…}wrappers中 希望你能从下面的例子中看出我的意图 以下是我想要的: $("#auto").autocomplete({ source: "somepage.php", select: dropdownSelect, minLength: 0 }); 现在我认为上面的方法会起作用,因为我只是想说“继续触发这个事件,就到那个功能为止

我不确定这是否可行,但我希望能够将jQueryUI事件(直接)设置为函数,而不是继续包装在附加的
function(event,UI){…}
wrappers中

希望你能从下面的例子中看出我的意图

以下是我想要的:

$("#auto").autocomplete({
    source: "somepage.php",
    select: dropdownSelect,
    minLength: 0
});
现在我认为上面的方法会起作用,因为我只是想说“继续触发这个事件,就到那个功能为止”。 不幸的是,这是行不通的,我的结局是:(出于某种原因,与所有数据都断开了连接)


非常感谢。

以下两个例子在理论上都应该有效:

var dropdownSelect = function(event, ui) {  
    // Code to select drop down
};

$("#auto").autocomplete({
    source: "somepage.php",
    select: dropdownSelect,
    minLength: 0
});
这是:

function dropdownSelect(event, ui) {  
    // Code to select drop down
};

$("#auto").autocomplete({
    source: "somepage.php",
    select: function(event, ui) { dropdownSelect(event, ui) },
    minLength: 0
});

JavaScript函数是一等公民,这意味着您可以像对待任何其他对象一样对待它们。

确定为什么不先定义该函数:

var dropdownSelect = function(event, ui) { dropdownSelect(event, ui) };
$("#auto").autocomplete({
    source: "somepage.php",
    select: dropdownSelect,
    minLength: 0
});

不是这样,第一个例子是一个自执行的
FunctionExpression
,它会由于堆栈满而导致错误。除了声明一个单独的变量和包装我的函数(使用相同的参数)之外,这就是我所拥有的,它不会通过。我猜附加层有什么区别?因此,无论我必须添加什么,包装器?都将由于无限循环而导致浏览器崩溃。这将导致堆栈异常,因为
dropdownSelect
是一个调用自身的
FunctionExpression
。我可以向您保证,您给出的这两个示例没有任何区别。@Sean:在尝试获取一些信息之后(就像让过度包装的函数运行起来一样),我已经让它工作了。我不知道为什么它以前不工作(因为那是许多修订版之前的事。一定会有一些不同,不过因为现在包装的版本丢失了
$(this)
。您可能想签出,并考虑到这一点。
var dropdownSelect = function(event, ui) { dropdownSelect(event, ui) };
$("#auto").autocomplete({
    source: "somepage.php",
    select: dropdownSelect,
    minLength: 0
});
var dropdownSelect = function(event, ui) { ... };
var onDropdownSelect = function(event, ui) { dropdownSelect(event, ui) };
$("#auto").autocomplete({
    source: "somepage.php",
    select: onDropdownSelect,
    minLength: 0
});