如何从一个函数传递变量给另一个函数
变量 '网址' 是点击功能里面不确定的,但它是可用buildUrl函数内部如何从一个函数传递变量给另一个函数
HTML:
<label class="secondary" for="car01">
<input type="checkbox" id="car01" name="carid" value="car01" checked>Select<span></span>
</label>
<label class="secondary" for="car02">
<input type="checkbox" id="car02" name="carid" value="car02" checked>Select<span></span>
</label>
JS:
$(document).ready(function() {
//Init
buildUrl();
var url;
// Listen to change event
$('.selected-cars input[type=checkbox]').change(function (e) {
e.preventDefault();
if($(this).prop('checked')){
$(this).val();
buildUrl();
$('.button').click(function() {
console.log('Click happen');
console.log('url', url);
$('.button').attr('href', url);
});
}else{
$(this).val();
buildUrl();
}
});
// Build URL
function buildUrl(){
var carIds = $("input[type=checkbox]:checked").serialize();
var url = "abc.com?" + carsIds;
console.log('url', url);
};
});
删除var url = "abc.com?" + carsIds;
中的var
。
var
关键字会创建一个新的url
,它的本地范围为buildUrl
函数。如果您离开var
,则将分配给您在外部范围内声明的url
。
function buildUrl(){
var carIds = $("input[type=checkbox]:checked").serialize();
url = "abc.com?" + carsIds;
console.log('url', url);
};
然而,修改范围之外的这样的变量的函数常常使对代码更难跟随,特别是当它不是一个已知设计图案的一部分。
看起来你也想立即更新按钮的href
,而不是等待某人点击它。我建议简化您的代码:
$(document).ready(function () {
// Listen to change event
$('.selected-cars input[type=checkbox]').change(function () {
var carIds = $("input[type=checkbox]:checked").serialize();
var url = "abc.com?" + carsIds;
// Update button href
$('.button').attr('href', url);
});
});
如果你想有一个buildUrl
功能,让您可以在其他地方调用它,然后使它返回,而不是从外部作用域赋值给一个变量的网址:
$(document).ready(function () {
// Listen to change event
$('.selected-cars input[type=checkbox]').change(function () {
var url = buildUrl();
// Update button href
$('.button').attr('href', url);
});
function buildUrl () {
var carIds = $("input[type=checkbox]:checked").serialize();
return "abc.com?" + carIds;
}
});
谢谢。但是点击函数不起作用 –
@ ShoaibUd-Din你也没有更新按钮的'href'直到它被点击。我发布了一个简化版本,每次更新'href'时间一个复选框切换。 – Paulpro
它的工作!谢谢 –
但你永远不会设置网址。像'url = conquestUrl;'或其他东西 –
'''buildUrl'中的var url'会遮盖外部'var url',这就是为什么你不能在'click'内看到值('abc.com ...') '处理程序。 – univerio
如果我删除了var url;问题仍然存在:( –