Javascript 如何将变量从一个函数传递到另一个函数
变量“url”在click函数中未定义,但在buildUrl函数中可用 html:Javascript 如何将变量从一个函数传递到另一个函数,javascript,jquery,Javascript,Jquery,变量“url”在click函数中未定义,但在buildUrl函数中可用 html: 删除var url=“abc.com?”+carsIds中的var var关键字创建了一个新的url,它在本地范围内是buildUrl函数的作用域。如果您关闭var,您将分配到您在外部范围中声明的url function buildUrl(){ var carIds = $( "input[type=checkbox]:checked" ).serialize(); url = "abc.
删除
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
函数,以便在其他地方调用它,则让它返回url,而不是从外部作用域分配给变量:
$(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;
}
});
删除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
函数,以便在其他地方调用它,则让它返回url,而不是从外部作用域分配给变量:
$(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;
}
});
但您从未设置url。像url=conquestUrl
或buildUrl
中的某个var url
将外部var url
隐藏起来,这就是为什么在处理程序中看不到值(abc.com…
)的原因。如果我删除了var url;问题仍然存在:(否,不要在那里删除它!保留最上面的一个,并从函数buildUrl
中删除var
,这样它就使用以前定义的函数,而不是创建一个新的函数,当函数执行完后,它将被销毁,但您永远不会设置url。例如url=conquestur;
或其他var-url
>在buildUrl
中,外部var url
会被阴影遮挡,这就是为什么您无法在中看到值(abc.com…
)的原因。单击处理程序。如果我删除了var url,问题仍然存在:(否,不要在那里删除它!保留最上面的一个,并从函数buildUrl
中删除var
,因此它使用前面定义的函数,而不是创建一个在函数完成时将被销毁的新函数executing@ShoaibUd-Din在单击按钮之前,您也没有更新按钮的href
。I posted发布了一个简化版本,每次复选框切换时更新href
。@ShoaibUd Din您也没有更新按钮的href
,直到它被单击。我发布了一个简化版本,每次复选框切换时更新href
。