2011-11-08 206 views
0

我正在尝试此代码来更新醉心插件的回退。 如何访问第一个函数之外的变量a?我可以重写该变量来进行更新,是否正确?变量未定义

<script type="text/javascript"> 
$(document).ready(function() { 
    var a ="Login"; 
    $("#login_form").submit(function() { 
     var formdata = $("#login_form").serializeArray(); 
     $.ajax({ 
      url: "ajax_login.php", 
      type: "post", 
      dataType: "json", 
      data: formdata, 
      success: function (data) { 
       if (data.livre === 'complete') { 
        var a ="success"; 
       } else 
        var a = "Error"; 
      } 
     }); 
return false; 
    }); 
}); 
</script> 

<script type='text/javascript'> 
$(document).ready(function() { 
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); // a is not defined 
}); 
</script> 

回答

1

无法在创建Tipsy对象后不更改fallback属性,而不会自己创建tipsy plugin本身。

鉴于fallback参数是一个字符串,只要执行$().tipsy({...})函数就会解释该参数。因此,以后更改变量a的值不会更改fallback参数。

我首先想到的是直接更新从$.fn.tipsy.defaults对象fallback属性会做到最好的,但创建一个新的Tipsy对象时,该fallback财产基本上复制它,所以它会存储fallback初始价值永存。

解决方法之一是分叉Tipsy项目并将fallback属性更改为接受字符串或function()。像这样,它可以做到这样的事情:fallback: function(){ return a;}

+0

我会用动态内容和淡入淡出来做一个简单的css工具提示。保持简单,并解决。谢谢 – Daniel

0

移动a变量准备功能外:

<script type="text/javascript"> 
    var a ="Login"; 
    $(document).ready(function() { 

此外,不要在你的成功的功能使用var关键字。您正在重新声明该变量,而不是设置ready函数开始处定义的变量的值。

success: function (data) { 
      if (data.livre === 'complete') { 
       a ="sucess"; 
      } else 
       a = "Error"; 
     } 
0

您可以使其成为全球。不管这是你的应该做什么取决于。

如果它全部在doc中运行,那么没有理由拥有一个全局的;你可以从ajax成功的第二个docready中运行代码(或者完成,如果它满足你的需要的话)。

很难说;不知道片段与现实有多接近。

3

将第二个document.ready块内的代码移动到第一个(这将使您的.tipsy()呼叫可访问变量a)或使a变量为全局变量。

<script type="text/javascript"> 
$(document).ready(function() { 
    var a ="Login"; 
    $("#login_form").submit(function() { 
     var formdata = $("#login_form").serializeArray(); 
     $.ajax({ 
      url: "ajax_login.php", 
      type: "post", 
      dataType: "json", 
      data: formdata, 
      success: function (data) { 
       if (data.livre === 'complete') { 
        a ="success"; 
       } else 
        a = "Error"; 
      } 
     }); 
return false; 
    }); 
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); 

}); 
</script> 

OR

<script type="text/javascript"> 
var a = "Login"; 
$(document).ready(function() { 
    $("#login_form").submit(function() { 
     var formdata = $("#login_form").serializeArray(); 
     $.ajax({ 
      url: "ajax_login.php", 
      type: "post", 
      dataType: "json", 
      data: formdata, 
      success: function (data) { 
       if (data.livre === 'complete') { 
        a ="success"; 
       } else 
        a = "Error"; 
      } 
     }); 
return false; 
    }); 
}); 
</script> 

<script type='text/javascript'> 
$(document).ready(function() { 
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); // a is not defined 
}); 
</script> 

通知我删除从您的AJAX调用成功回调var声明。

UPDATE

要传递的a更新值醉意,你需要运行在回调函数的调用.tipsy()。你也可以运行它,你现在的样子,并在回调函数更新的醉意的插件(但是我不熟悉的插件,我不知道如何做到这一点):

<script type="text/javascript"> 
$(document).ready(function() { 
    var a ="Login"; 
    $("#login_form").submit(function() { 
     var formdata = $("#login_form").serializeArray(); 
     $.ajax({ 
      url: "ajax_login.php", 
      type: "post", 
      dataType: "json", 
      data: formdata, 
      success: function (data) { 
       if (data.livre === 'complete') { 
        a ="success"; 
       } else { 
        a = "Error"; 
       } 
       $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); 
      } 
     }); 
return false; 
    }); 
}); 
</script> 
+0

解决了错误,但工具提示未更新。永远是“登录”,永远不会改变成功或错误。 – Daniel

+0

AJAX调用是异步的,这意味着在调用'.tipsy()'调用之后它执行回调函数。检查我的更改以便在您的回调函数中加载醉意。另一个解决方案是加载tispy,但是在回调函数中更新它(我个人不知道插件,所以我不知道该怎么做)。 – Jasper

0

1)你为什么有2个Document.ready? 2)您可以使用全局参数或$ .data来转换数据。 3)为你的解决方案 - 声明var a ="Login";外侧或使用自我执行功能,它保持全球变种的范围。