根据表单输入重定向到URL

时间:2018-07-14 15:32:23

标签: javascript

我正在尝试让用户输入数字,并根据该数字在哪个范围内进行重定向。如果使用文本输入并将每个输入分配给相应的URL,则可以使用,但是当我使用数字输入时,则不起作用。

我现在的代码是

<html>
<div align=center>
  <br>
<form method="post" id="TEST"> 
<input type="number" id="command" tabindex="1">
<br><br>
<input type="submit" value="redirect me">
</form>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"  type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
  $("form").submit(function() {

    if ($('#command').val() >= 46) {
      window.location = "http://www.example.com/46";
    }

    else if ($('#command').val() > 46.1 && > 50) {
      window.location = "http://www.example.com/49";

    }

    else if ($('#command').val() === 50) {
      window.location = "http://www.example.com/50";
    }

    else if ($('#command').val() >= 50.1 && <= 52) {
      window.location = "http://www.example.com/52";
    }

    else if ($('#command').val() >= 52.1 && <= 53) {
      window.location = "http://www.example.com/53";
    }

    else if ($('#command').val() >= 53.1 && <= 54) {
      window.location = "http://www.example.com/54"
    }

    else if ($('#command').val() >= 54.1 && <= 56 {
      window.location = "http://www.example.com/56"
    }

    else return false;
  });

  });
});
</script>

</html>

我确定这很明显,但是我无法解决。任何解决方案表示赞赏!

3 个答案:

答案 0 :(得分:0)

您需要比较$('#command').val()两侧的&&。您需要将每个分组视为自己的全新比较。这是前两个if语句:

let command = $('#command').val()
if (command >= 46) {
  window.location = "http://www.example.com/46";
}

else if (command > 46.1 && command > 50) {
  window.location = "http://www.example.com/49";

}

最后一个)中缺少else if。同样,我们也可以调用false而不是返回e.preventDefault(),这将防止该元素(在这种情况下为表单提交)的默认行为。

我们要做的另一件事是颠倒if / else语句的顺序,因为一旦您使用大于或等于46的数字,则第一个语句将运行,并且所有其他测试数字都是大于46,因为第一个语句已作为true执行,所以它将永远不会到达它们。

您的html输入字段设置为数字,但是您的javascript允许使用浮点数,因此如果没有step属性,我们无法在数字字段中输入浮点数,所以我在输入字段中添加了step="0.01"

在下面的示例中,出于堆栈溢出的目的,我将window.location替换为console.log

$(document).ready(function() {
  $("form").submit(function(e) {
    // Stop the form from submiting
    e.preventDefault()
    // Save a reference to the value
    let command = parseFloat($('#command').val())
    // Test the values from highest to lowest
    if (command >= 54.1 && command <= 56) {
      console.log("http://www.example.com/56");
    } else if (command >= 53.1 && command <= 54) {
      console.log("http://www.example.com/54");
    } else if (command >= 52.1 && command <= 53) {
      console.log("http://www.example.com/53");
    } else if (command >= 50.1 && command <= 52) {
      console.log("http://www.example.com/52");
    } else if (command === 50) {
      console.log("http://www.example.com/50");
    } else if (command > 46.1 && command > 50) {
      console.log("http://www.example.com/49");
    } else if (command >= 46) {
      console.log("http://www.example.com/46");
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form method="post" id="TEST">
  <input type="number" id="command" tabindex="1" step="0.01">
  <br><br>
  <input type="submit" value="redirect me">
</form>

答案 1 :(得分:0)

您的代码语法完全错误。我纠正了。请参阅下面代码中的评论。

但是代码中最大的错误-您编写

if ($('#command').val() >= 50.1 && <= 52)

代替:

if ($('#command').val() >= 50.1 && $('#command').val() <= 52)

以此类推...

更正的代码:

$("form").submit(function()
{
    var val = $('#command').val(); //Suggestion: please use $('#command').val() only one time

    if(val <= 46) // >= was wrong
    {
        window.location = "http://www.example.com/46";
    }

    else if(val > 46.1 && val < 50) // > 50 was wrong
    {
        window.location = "http://www.example.com/49";
    }

    else if(val == 50) //do not use "===" because your value is a string! Or convert it to number
    {
        window.location = "http://www.example.com/50";
    }

    else if(val >= 50.1 && val <= 52)
    {
        window.location = "http://www.example.com/52";
    }

    else if (val >= 52.1 && val <= 53)
    {
        window.location = "http://www.example.com/53";
    }

    else if(val >= 53.1 && val <= 54)
    {
        window.location = "http://www.example.com/54"
    }

    else if(val >= 54.1 && val <= 56) // one ) symbol was missed
    {
        window.location = "http://www.example.com/56"
    }

    else return false;
});

答案 2 :(得分:-1)

您的代码是用于比较浮点数的身份比较字符串,您的第二次比较缺少要比较的值。

将值转换为浮点型,在else-ifs中指定用于第二次比较的值,它将按您的意愿进行:

var value = parseFloat($('#command').val());
if (value >= 46) {
    window.location = "http://www.example.com/46";
} 
else if (value > 46.1 && value > 50) {
    window.location = "http://www.example.com/49";
}
[ ... ]