【问题标题】:multiple Conditionnal redirect when user fill a form用户填写表单时的多个条件重定向
【发布时间】:2022-01-20 23:54:15
【问题描述】:

我想根据用户在输入字段中填写的内容将用户重定向到不同的页面。

示例:

  • 当他输入 1 或 2 时,他将被重定向到 google
  • 当他输入 3 或 4 时,他将被重定向到 facebook
  • 当他输入 5 时,他将被重定向到 stackoverflow

其他显示消息

【问题讨论】:

标签: javascript redirect


【解决方案1】:

尝试使用if else 语句和window.location.href 将用户引导到目标窗口。

function redirect() {
  const inputVal = Number(document.getElementById("inputVal").value);
  let url = "";
  if (inputVal) {
    if (inputVal === 1 || inputVal === 2){ 
      url = "https://www.google.com"
    } else if (inputVal === 3 || inputVal === 4){ 
      url = "https://www.facebook.com"
    } else {
      console.log('Redirect Not Defined!!')
    }
  }
  
  if (url) {
    window.location.href = url
  }
}

document.getElementById("redirectButton").addEventListener("click", redirect);
<input type="number" value=1 id="inputVal" />
<button type="button" id="redirectButton"> Redirect </button>

【讨论】:

  • 好的!! [ --fixed ]
  • 希望你不要使用内联style,停止使用不安全的内联on* 处理程序。请改用addEventListener()。 JS 和 CSS 应该只在一个地方,那就是各自的标签或文件。
  • 如果不在form 中,请尝试始终将type="button" 用于您的button 元素,因为默认情况下类型为"submit"
  • 谢谢!!已尝试根据您的意见改进方法
  • Rishu 干得好!
【解决方案2】:

我通常不推荐switch语句,但这里很合适

请注意,这里的操作可能会被阻止

document.getElementById("myForm").addEventListener("submit", function(e) {
  let loc = "";
  switch (+document.getElementById("inputVal").value) {
    case 1:
    case 2:
      loc = "https://www.google.com";
      break;
    case 3:
    case 4:
      loc = "https://www.facebook.com"
      break;
    case 5:
      loc = "https://stackoverflow.com";
      break;
    default:
      console.log('Redirect Not Defined!!')
      e.preventDefault(); // cancel submit
  }
  if (loc) this.action = loc;
})
<form id="myForm" target="_blank">
  <input type="number" value=1 id="inputVal" />
  <button type="submit"> Redirect </button>
</form>

【讨论】:

    【解决方案3】:

    这是另一个可行的建议,使用对象作为地图,通过索引引用所需位置:

    const EL = (sel, EL) => (EL || document).querySelector(sel);
    
    const navigate = () => {
    
      const addr = [
        "google.com",
        "facebook.com",
        "stackoverflow.com",
      ];
    
      const maps = {
        1: 0,
        2: 0,
        3: 1,
        4: 1,
        5: 2,
      };
    
      const EL_num = EL("#num");
      const url = addr[maps[EL_num.value]];
    
      if (url) return location.assign(`https://${url}`);
      console.log("Coudn't navigate");
    };
    
    EL("#go").addEventListener("click", navigate);
    <input id="num" type="number" value="1">
    <button id="go" type="button">Go</button>

    比使用ifswitch 语句更干净。

    【讨论】:

    • 谢谢。它似乎工作。但是当数字错误或不存在时,我如何在页面中打印一条消息
    • 我解决了。通过将 conole.log 行替换为: alert("the number " + inputVal + " is wrong !")
    • @CMMSAGHIR alertprompt 在 2021 年不应再使用。相反,只需将消息打印到页面上的预定义元素中即可。
    猜你喜欢
    • 2021-02-25
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2016-05-28
    • 1970-01-01
    • 2011-06-17
    • 2012-01-28
    相关资源
    最近更新 更多