【问题标题】:How can I change the value of a range input from an integer to a string?如何将范围输入的值从整数更改为字符串?
【发布时间】:2017-01-06 02:19:42
【问题描述】:

我有一个输入范围的表单-
<input id="slider" type="range" min="0" max="120" step="40" val="40">

我想将值作为字符串发送,而不是表示整数。
例如- 0 =“冷冻”,40 =“凉爽”,80 =“温暖”,120 =“热”

这对收件人来说更有意义。如何在传递值之前将整数换成单词?

我认为 jQuery if 语句可能会起作用 -

$("#slider").change(function(){ 
  if('this').val(0) {
    $('#slider').val("freezing")
  }
  else if('this').val(40) {
    $('#slider').val("cool")
  }
  else if('this').val(80) {
    $('#slider').val("warm")
  }
  else if('this').val(120) {
    $('#slider').val("hot")
  }  
console.log($('#slider').val())
});

我知道我的代码是错误的,因此非常感谢任何清理逻辑/语法的帮助,假设它是可能的?

【问题讨论】:

  • $('#slider').val() + '' 是一个巧妙的小技巧,可以通过将任何类型(几乎)与字符串连接来将其更改为字符串。
  • 我觉得像this ?
  • 谢谢。为了确认-我应该将 $('#slider').val("cool") 更改为 $('#slider').val() + 'cool' ?虽然现在技术上的价值不会是“40cool”吗?在我的表单中,整数将毫无意义,所以我想避免用户或收件人看到它们。
  • @webmasterWannabee 试试我的链接
  • 我根据您提供的信息进行猜测,但您可能希望有一个单独的字段来显示您的计算值。如果您更改它以更新文本(或隐藏)字段,那么上面的代码应该可以工作。我认为滑块值必须是数字,否则滑块不会知道您的值是更高还是更低。

标签: jquery input integer range


【解决方案1】:

能够将新值传递给表单的解决方案在于使用与输入同名的隐藏字段。 整数值被传递到隐藏字段中,然后可以使用 jQuery 将值更改为字符串。

我将隐藏输入的初始值设置为拇指的默认起始值​​。 这样,如果用户确定默认条目是正确的并且他们不更改它,它仍然会将值发送到表单。

我还添加了一个 console.log(),这样我就可以检查该值是否正确传递,而不仅仅是显示在标签中。

html

<input id="bar" name="temperature" type="range" min="0" max="120" step="80" val="40"/>

<input id="slider" type="hidden" name="temperature" value="Warm" />

<label id="labelTemp">Warm</label>

jQuery

$("#bar").change(function() {

var value = $(this).val();

if (value == 0) {
   $("#slider").val("Freezing");
} 
   else if (value == 40) {
   $("#slider").val("Cool");
} 
   else if (value == 80) {
   $("#slider").val("Warm");
} 
  else if (value == 120) {
  $("#slider").val("Hot");
}

$("#labelTemp").text($("#slider").val());

console.log($("#slider").val());

});

在 jsfiddle 中查看 https://jsfiddle.net/webmasterWannabee/gyv4rgws/#&togetherjs=dOh4uHa3MS

【讨论】:

    【解决方案2】:

    我认为输入范围值仅适用于数字而不是您想要的字符串,但您可以在范围滑块旁边的标签中显示温度值。这样,用户将滑动滑块并在更改滑块时看到您的温度值之一。

    你可以这样做:

    HTML:

    <input id="slider" type="range" step="40" val="40" min="0" max="120"></input>
    
    <label id="labelTemp"></label>
    

    然后是你的 JavaScript/jQuery:

    $("#slider").change(function(){
        var s = "";
        var value = $(this).val();
    
        if(value == 0){
            s = "Freezing";
        }
        else if(value == 40){
            s = "Cool";
        }
        else if(value == 80){
            s = "Warm";
        }
        else if(value == 120){
            s = "Hot";
        }
    
        $("#labelTemp").text(s);
    });
    

    这是一个 jsfiddle 来演示它是如何工作的: https://jsfiddle.net/vsf42kej/1/

    【讨论】:

    • 非常感谢@JustSomeDude 您的解决方案为我提供了所需的正确起点。在被告知使用隐藏输入之后,我能够修改它并准确创建我需要的内容,如下面的答案所示。
    • @webmasterWannabee 你的答案和我的一样,除了你添加了一个额外的步骤来将一个值放入隐藏字段......滑块元素是一个输入元素,它的值将被序列化表单,您不需要额外的隐藏字段。当有人发布可以帮助您的内容时,请参考:stackoverflow.com/help/someone-answers
    • 没错,@JustSomeDude 添加了隐藏字段,因为对我来说,直到我这样做才有效。我在一个独特的 CMS(不是 HTML 中的常规手工编码)中创建这个表单,所以也许这改变了一些事情。我发布的答案是对我有用的答案,因此我想分享它以防其他人处于同一位置。我也很抱歉没有阅读大量的 stackoverflow 法规并有胆量感谢您。正式注明。
    猜你喜欢
    • 2020-08-27
    • 2013-09-25
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多