Javascript 如果选中复选框,则函数更新字符串或值

Javascript 如果选中复选框,则函数更新字符串或值,javascript,jquery,d3.js,Javascript,Jquery,D3.js,我正在尝试编写一个函数,当选中复选框时,该函数将从input:radio或text()返回值 没有必要同时返回两个。其中一个会有帮助 这是html模板示例: $('input.choose age')。在('change',function()上{ $('input.choose age')。不是(this).prop('checked',false); }); 10-14 15-19 10-19 最简单的d3方法是: d3.selectAll(“.choose age”) .on(“更改

我正在尝试编写一个
函数
,当选中
复选框
时,该函数将从
input:radio
text()返回

没有必要同时返回两个。其中一个会有帮助

这是
html
模板示例:

$('input.choose age')。在('change',function()上{
$('input.choose age')。不是(this).prop('checked',false);
});

10-14
15-19
10-19

最简单的
d3
方法是:

d3.selectAll(“.choose age”)
.on(“更改”,函数(){
console.log(this.value);
});

10-14
15-19
10-19

最简单的
d3
方法是:

d3.selectAll(“.choose age”)
.on(“更改”,函数(){
console.log(this.value);
});

10-14
15-19
10-19

为什么您的代码不起作用:

Atempt 1、3和4: Label是jquery元素,您的“返回结果[0]”将在jquery例程的某个位置返回结果

Atempt2: 代码现在返回结果,而结果在将来某处设置。所以现在它还没有定义

如何做到: 同步(不推荐):

但是,这将阻止浏览器线程,导致延迟并最终崩溃(糟糕!)

异步: 1.回拨:

function ageLabel(callback){
d3.selectAll(".choose-age") .on("change", function(d){callback(this.value);});
}

ageLabel((result)=>{
  //age label checked, so now work with result
 });

 // thanks to mark
2.承诺:

function ageLabel(){
 Return new Promise(function(resolve,reject){
d3.selectAll(".choose-age") .on("change", function(d){resolve(this.value); });
});
}


ageLabel().then((result)=>{
//do sth with result
});

为什么您的代码不起作用:

Atempt 1、3和4: Label是jquery元素,您的“返回结果[0]”将在jquery例程的某个位置返回结果

Atempt2: 代码现在返回结果,而结果在将来某处设置。所以现在它还没有定义

如何做到: 同步(不推荐):

但是,这将阻止浏览器线程,导致延迟并最终崩溃(糟糕!)

异步: 1.回拨:

function ageLabel(callback){
d3.selectAll(".choose-age") .on("change", function(d){callback(this.value);});
}

ageLabel((result)=>{
  //age label checked, so now work with result
 });

 // thanks to mark
2.承诺:

function ageLabel(){
 Return new Promise(function(resolve,reject){
d3.selectAll(".choose-age") .on("change", function(d){resolve(this.value); });
});
}


ageLabel().then((result)=>{
//do sth with result
});


不,不要这样做。如果异步事件(标签检查)由同步代码处理,浏览器线程将被阻塞,直到事件发生。这不是一种好的风格。使用回扣或承诺…不。不要这样做。如果异步事件(标签检查)由同步代码处理,浏览器线程将被阻塞,直到事件发生。这不是一种好的风格。使用回电或承诺…太好了!谢谢,马克。我将尝试根据另一个答案使用您的示例。@estebanpdl,请参阅更新的答案,我不明白您的问题。Jonas w的答案是可行的,但对你来说,你真正想做的事情太复杂了。太棒了!这是一个简单的方法。我想我需要这样的东西。但是,当我
console.log(ageLabel())
并更改为(即15-19)时,它仍然显示10-14。我需要换点别的吗?谢谢你的支持。回答总是很好的,投了赞成票,但我相信你不需要在
函数(d)
中使用参数(
d
),如果你只是处理
这个
@GerardoFurtado,你当然是对的。当使用d3时,这是一种习惯的力量,总是传递“魔法”
d
!伟大的谢谢,马克。我将尝试根据另一个答案使用您的示例。@estebanpdl,请参阅更新的答案,我不明白您的问题。Jonas w的答案是可行的,但对你来说,你真正想做的事情太复杂了。太棒了!这是一个简单的方法。我想我需要这样的东西。但是,当我
console.log(ageLabel())
并更改为(即15-19)时,它仍然显示10-14。我需要换点别的吗?谢谢你的支持。回答总是很好的,投了赞成票,但我相信你不需要在
函数(d)
中使用参数(
d
),如果你只是处理
这个
@GerardoFurtado,你当然是对的。当使用d3时,这是一种习惯的力量,总是传递“魔法”
d
!谢谢你的建议,乔纳斯。
ageLabel((result)=>{})内的结果使用
Callback
来自示例尝试2?如果您希望像示例atempt 2中那样解决回调,请像这样解决“Callback($(this).next('span').text())”谢谢您的帮助,Jonas。“我将练习这些例子。谢谢你的建议,”乔纳斯说。
ageLabel((result)=>{})内的结果使用
Callback
来自示例尝试2?如果您希望像示例atempt 2中那样解决回调,请像这样解决“Callback($(this).next('span').text())”谢谢您的帮助,Jonas。我将练习这些例子。