社区首页 >问答首页 >change() jQuery无效

change() jQuery无效
EN

Stack Overflow用户
提问于 2017-07-07 14:51:37
回答 3查看 117关注 0票数 0

我在jQuery中使用change()事件时遇到了一些困难。我正在制作一个将温度转换为开尔文的小程序,我希望在转换后保持我的值的跨度在每次转换温度变化时更新,每次从单选按钮中选择不同的温度标度时更新。

有关守则:

代码语言:javascript
代码运行次数:0
复制
$(document).ready(function() {
  $('input[type=radio]').checkboxradio();
  var temp = parseFloat()
  $('input.listener').change(function() {
    var name = $(this).attr("name");
    var val = $(this).val();

    switch (name) {
      case 'unit':
        var temperature = $('input#temp').val();
        switch (val) {
          case 'f':
            $('span#output').html(((temperature - 32) / 1.8) + 273.15);
            break;
          case 'c':
            $('span#output').html(temperature + 273.15);
            break;
          case 'r':
            $('span#output').html(temperature / 1.8);
            break;
        }
      case 'temp':
        var u = $('input[name=unit]:checked').val();
        switch (u) {
          case 'f':
            $('span#output').html(((val - 32) / 1.8) + 273.15);
            break;
          case 'c':
            $('span#output').html(val + 273.15);
            break;
          case 'r':
            $('span#output').html(val / 1.8);
            break;
        }
    }
  });
});
代码语言:javascript
代码运行次数:0
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="widget">
  <fieldset>
    <legend>Select a Unit to Convert to Kelvin: </legend>
    <label for="fRadio">Fahrenheit</label>
    <input id="fRadio" class="listener" type="radio" name="unit" value="f">
    <label for="cRadio">Celsius</label>
    <input id="cRadio" class="listener" type="radio" name="unit" value="c">
    <label for="rRadio">Rankine</label>
    <input id="rRadio" class="listener" type="radio" name="unit" value="r">
  </fieldset>
</div>
<h2>Temperature Converter</h2>
<p>Type a value in the Fahrenheit field to convert the value to Kelvin:</p>

<p>
  <label>Temperature</label>
  <input id="temp" class="listener" type="number" value="32">
</p>
<p>Kelvin: <span id="output"></span></p>

我猜我犯了一个很愚蠢的小错误,但我似乎搞不明白。感谢所有的帮助,建议和解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-07 15:19:40

代码有两个错误:

  • 忘记父breaks;语句的switch
  • 忘记了温度场上的name="temp"

我将最终的温度改为变量,并使输出的文本能够有如此多的$('span#output').html(temperature);

此外,您应该使用oninput事件来检测number字段的更改。

代码语言:javascript
代码运行次数:0
复制
$(document).ready(function() {
  //$('input[type=radio]').checkboxradio();
  var temp = parseFloat();
  $('input.listener').on('change', updateTemp);
  $('input.listener').on('input', updateTemp);
  
  function updateTemp() {
    var name = $(this).attr("name");
    var val = $(this).val();
    var final;
    
    switch (name) {
      case 'unit':
        var temperature = $('input#temp').val();
        switch (val) {
          case 'f':
            final = ((temperature - 32) / 1.8) + 273.15;
            break;
          case 'c':
            final = temperature + 273.15;
            break;
          case 'r':
            final = temperature / 1.8;
            break;
        }
      break;
      case 'temp':
        var u = $('input[name=unit]:checked').val();
        switch (u) {
          case 'f':
            final = ((val - 32) / 1.8) + 273.15;
            break;
          case 'c':
            final = val + 273.15;
            break;
          case 'r':
            final = val / 1.8;
            break;
        }
      break;
    }
    $("#output").text(final);
  }
});
代码语言:javascript
代码运行次数:0
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="widget">
  <fieldset>
    <legend>Select a Unit to Convert to Kelvin: </legend>
    <label for="fRadio">Fahrenheit</label>
    <input id="fRadio" class="listener" type="radio" name="unit" value="f">
    <label for="cRadio">Celsius</label>
    <input id="cRadio" class="listener" type="radio" name="unit" value="c">
    <label for="rRadio">Rankine</label>
    <input id="rRadio" class="listener" type="radio" name="unit" value="r">
  </fieldset>
</div>
<h2>Temperature Converter</h2>
<p>Type a value in the Fahrenheit field to convert the value to Kelvin:</p>

<p>
  <label>Temperature</label>
  <input id="temp" class="listener" type="number" name="temp" value="32">
</p>
<p>Kelvin: <span id="output"></span></p>

票数 1
EN

Stack Overflow用户

发布于 2017-07-07 15:21:58

您应该将其中一个单选按钮设置为默认的checked=“选中”。然后尝试如下:

代码语言:javascript
代码运行次数:0
复制
   $(document).ready(function () {
        $('input.listener').change(function () {
          if ($(this).attr("type") == 'radio') {
            //radio button changed
            var u = $(this).val();
          } else {
            var u = $("input[type='radio']:checked").val();
          }
          var temperature = $('#temp').val();

          switch (u) {
            case 'f':
              $('span#output').html(((temperature - 32) / 1.8) + 273.15);
              break;
            case 'c':
              $('span#output').html(temperature + 273.15);
              break;
            case 'r':
              $('span#output').html(temperature / 1.8);
              break;
          }
        });
      });
票数 0
EN

Stack Overflow用户

发布于 2017-07-07 15:39:16

之后就没有break;

代码语言:javascript
代码运行次数:0
复制
case 'unit':

var name = "temp"

代码语言:javascript
代码运行次数:0
复制
var val = $(this).val();

上面var val的值将是字符串格式的数字,因此,当您在case 'temp'中执行val + something时,数字将被追加,而不是被添加或减缩。使用parseInt(val)在'temp'情况下将输入框的值转换为整数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44980742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档