是否可以将参数/变量传递给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);
})
如果你不愿意使用全局变量,那么你就不能访问它范围之外的变量,你可以做一件事来获得值,它基本上是闭包概念,如果需要,你可以在其他地方使用示例函数对象。
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));
更多信息:http://api.jquery.com/on/#passing-数据
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);
}
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id="buttonId">test</button>
我为演示将事件从blur
更改为click
,但这适用于任何事件。
您需要从函数example()
中return
和var A
。然后您可以通过直接访问函数来访问var A
。
function example(){
//Ajax load to get A
Var A='Reusable Data';
return A;
}
$('#buttonId').on("blur", function() {
console.log("I need"+ example());
}
编辑
使其全球化(我不会建议你这样做)
var A;
function example(){
A='Reusable Data';
return A;
}
$('#buttonId').on("blur", function() {
console.log("I need"+ example());
}
您可能会将这两个函数包装在IIFE(立即调用的函数表达式)上,并在ajax调用成功时绑定事件
(function(){
function example(){
$.ajax.........done(function(response){
bindOnBlurEvent(response);
});
}
function bindOnBlurEvent(response){
//bind the event with the response
}
}());