选中复选框时的函数更新字符串或值

时间:2016-12-04 20:22:08

标签: javascript jquery d3.js

我试图写functionvalueinput:radiotext() span返回checkboxhtml检查。

没有必要同时返回。其中一个或另一个都会有所帮助。

这是$('input.choose-age').on('change', function() { $('input.choose-age').not(this).prop('checked', false); });模板示例:



<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="checkbox">
  <div class='col-xs-3 col-md-2'>
    <input type="radio" id='wom-10-14 age' class='choose-age' value='10-14' checked /> <span class='text-left'>10-14</span>
  </div>
  <div class='col-xs-3 col-md-2'>
    <input type="radio" id='wom-15-19 age' class='choose-age' value='15-19' /> <span class='text-left'>15-19</span>
  </div>
  <div class='col-xs-3 col-md-2'>
    <input type="radio" id='wom-10-19 age' class='choose-age' value='10-19' /> <span class='text-left'>10-19</span>
  </div>
</div>
&#13;
function ageLabel() {
    var label = $('input:radio').change(function() {
        var result = $('input:radio:checked').map(function() {
            var age = $(this).next('span').text();
            return age;
        }).get();
        return result[0];
    });
    return label;
};
&#13;
&#13;
&#13;

这是我到目前为止所尝试的:

尝试1

function ageLabel() {
    $('#age').click(function() {
        if ($(this).is(':checked')) {
            var result = $(this).next('span').text();
        };
        return result;
    });
};

尝试2

function ageLabel() {
    $('input:radio').click(function() {
        if ($(this).is(':checked')) {
            var results = $('input:radio:checked').map(function() {
                var aged = $(this).next('span').text();
                return aged;
            }).get();
            return results[0];
        };
    });
};

尝试3

function ageLabel() {
    d3.selectAll('#age').on('change', function() {
        val = this.value;
        return val;
    });
};

尝试4

value

选中不同的text()时,上面的每个代码都不会返回新的input或{{1}}。

如何实现这一结果?

干杯!

2 个答案:

答案 0 :(得分:3)

最简单的// search_steps.js module.exports = function() { this.Given('I have visited Google', function (done) { client .url('http://google.com') .call(done); }); this.When('I search for {arg1:stringInDoubleQuotes}', function (arg1, done) { // Write code here that turns the phrase above into concrete actions client .setValue('input[name="q"]', 'Kittens') .call(done); }); this.Then('I see {arg1:stringInDoubleQuotes}', function (arg1, done) { // Write code here that turns the phrase above into concrete actions client .getValue('input[name="q"]').then(function(text){ expect('Kittens').to.eql(text); }) .call(done); }); }; 方式是:

d3
d3.selectAll(".choose-age")
  .on("change", function(){
    console.log(this.value);
  });

<强> EDITS

完全错过了您想要在函数中返回值的问题。 @ jonasw的答案有效,但它太复杂了。夫妻更简单的方法。首先,您可以在外部范围内使用变量。

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>

<div class="checkbox">
  <div class='col-xs-3 col-md-2'>
    <input type="radio" name="choose-age" id='wom-10-14 age' class='choose-age' value='10-14' checked /> <span class='text-left'>10-14</span>
  </div>
  <div class='col-xs-3 col-md-2'>
    <input type="radio" name="choose-age" id='wom-15-19 age' class='choose-age' value='15-19' /> <span class='text-left'>15-19</span>
  </div>
  <div class='col-xs-3 col-md-2'>
    <input type="radio" name="choose-age" id='wom-10-19 age' class='choose-age' value='10-19' /> <span class='text-left'>10-19</span>
  </div>
</div>

var ageLabel = '10-14'; d3.selectAll(".choose-age") .on("change", function(d){ ageLabel = this.value; }); 将始终拥有该值。

或者第二,如果你想要一个功能,只需选择值:

ageLabel
function ageLabel(){
  return d3.select(".choose-age:checked").node().value;
}

setInterval(function(){
  console.log(ageLabel());
}, 1000);

答案 1 :(得分:0)

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

尝试1&amp; 3&amp; 4: Label是一个jquery元素,你的&#34;返回结果[0]&#34;将结果返回到jquery例程中。

Atempt2: 代码返回结果 now ,而结果将在某个地方设置。所以现在它是未定义的

怎么做: 同步(不推荐):

function ageLabel(){
  while(true){
   if(labelischecked){
     break;
   }
   }
   return result;
  }

然而,这将阻止浏览器线程导致滞后并最终崩溃(糟糕!)

异步: 1.Callback:

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.Promise:

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
});