JavaScript函数传递?
我不确定这是否可行,但我希望能够将jQueryUI事件(直接)设置为函数,而不是继续包装在附加的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 }); 现在我认为上面的方法会起作用,因为我只是想说“继续触发这个事件,就到那个功能为止
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
});