是否可以将参数/变量传递给Onblur函数?

时间:2015-02-20 07:26:19

标签: javascript jquery

是否可以将参数/变量传递给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);
})

4 个答案:

答案 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

&#13;
&#13;
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;
&#13;
&#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
   }
}());