是否可以将参数/变量传递给Onblur函数,因为它们既是单独的函数又不使用全局变量并创建闭包函数?
我也不想调用example()函数,因为它有其他函数和AJAX。
function example(){
//Stuff I don't want to repeat.
//Ajax load to get A
Var A='Reusable Data';
}
$('#buttonId').on("blur", function() {
console.log("I need"+ A);
})
答案 0 :(得分:3)
如果您不愿意使用全局变量,那么您无法访问其范围之外的变量,您可以做一件事来获取值,它基本上是闭包概念,并且您可以在其他地方使用示例函数对象(如果需要)
function example(){
Var A;
return{
getValue:function(){
return A;
}
};
}
var exObj = example();
$('#buttonId').on("blur", function() {
console.log("I need"+ exOb.getValue());
}
<强>被修改强>
function example(){
Var A;
return{
getValue:function(fn){
fn(A);
},
};
}
var blurFunc = function(val) {
console.log("I need"+ val;
}
$('#buttonId').on("blur", example().getValue(blurFunc));
答案 1 :(得分:1)
在Jquery中,您可以在注册事件处理程序时传递数据。
更多信息:http://api.jquery.com/on/#passing-data
function example() {
//Stuff I don't want to repeat.
//Ajax load to get A
var A = 'Reusable Data';
return function() {
return A;
}
}
$('#buttonId')
.on(
"click",
{ getValue: example() },
function(event) {
var a = event.data.getValue();
alert("I need " + a);
}
);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id="buttonId">test</button>
&#13;
我将活动从blur
更改为click
以进行演示,但这适用于任何活动。
答案 2 :(得分:0)
您需要return
来自函数var A
的{{1}}。然后,您可以通过直接访问该功能来访问example()
。
var A
编辑
让它全球化(我不会建议你这样做)
function example(){
//Ajax load to get A
Var A='Reusable Data';
return A;
}
$('#buttonId').on("blur", function() {
console.log("I need"+ example());
}
答案 3 :(得分:0)
你可以将这两个函数包装在IIFE上(立即调用函数表达式)并在ajax调用成功时绑定事件
(function(){
function example(){
$.ajax.........done(function(response){
bindOnBlurEvent(response);
});
}
function bindOnBlurEvent(response){
//bind the event with the response
}
}());