我正在尝试使用此代码来更新tipsy插件的回退。 如何访问第一个函数之外的变量 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>
答案 0 :(得分:3)
将第二个document.ready块中的代码移动到第一个(通过a
调用可以访问.tipsy()
变量)或将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
声明。
<强>更新强>
要将更新后的a
值传递给tipsy,您需要在回调函数中运行.tipsy()
调用。您也可以像现在一样运行它并更新回调函数中的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>
答案 1 :(得分:1)
在不创建tipsy plugin本身的情况下创建Tipsy对象后,无法更改它的fallback
属性。
鉴于fallback
参数是一个字符串,只要执行$().tipsy({...})
函数就会对其进行解释。因此,之后更改变量a
的值不会更改fallback
参数。
我首先想到直接从fallback
对象更新$.fn.tipsy.defaults
属性就可以了,但是当创建一个新的Tipsy
对象时,fallback
属性基本上是复制在其中,因此它将永久存储fallback
的初始值。
一种解决方案是分叉Tipsy项目并更改fallback
属性以接受字符串或function()
。像这样,可以执行以下操作:fallback: function (){ return a;}
。
答案 2 :(得分: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";
}
答案 3 :(得分:0)
你可以把它变成全球性的。是否应该做什么取决于。
如果它已全部在doc中运行,则没有理由拥有全局;您可以从ajax成功运行第二个docready中的代码(如果满足您的需要,则完成)。
很难说;不知道这些片段与现实有多接近。
答案 4 :(得分:0)
1)为什么你有2个Document.ready ??
2)您可以使用全局参数或$ .data来传输数据。
3)对于你的解决方案 - 声明var a ="Login";
out side或使用self Executing func来保持全局变量的范围。