【问题标题】:Pressing the enter key while input is focused causes screen to go blank [duplicate]在输入集中时按 Enter 键会导致屏幕变为空白 [重复]
【发布时间】:2023-03-21 21:06:01
【问题描述】:

对不起,标题太长了,但我真的想不出另一种说法。我搜索过类似的帖子,但我发现的只是关于如何使用keyup() 的帖子。我已经在使用它了,我的问题是黑屏。

问题

我遇到的问题是,如果你点击提交按钮,一切都会正常运行,但是如果你在输入焦点时按下回车键,屏幕就会变成空白。

尝试的解决方案

为了解决这个问题,我尝试设置一个 keyup() 函数来防止默认并触发按钮点击。

$(document).keyup(function(e) {
    if ($("#bday").is(":focus") && e.key == "Enter") {
        e.preventDefault();
        $('#submit').click();
    }
});

总结

复制步骤

  • 在输入字段中输入日期
  • 按回车键(在您的键盘上)

预期行为

应该和鼠标点击提交按钮时一样。

实际行为

按下回车键后,屏幕变为空白。

结论

我看到回车键确实触发了对提交按钮的点击,但屏幕仍然是空白的。我的 keyup() 函数设置错误还是我完全错过了其他东西?没有控制台错误提示我,所以我一无所知。


片段

// Keyup
$(document).keyup(function(e) {
    if ($("#bday").is(":focus") && e.key == "Enter") {
        e.preventDefault();
        $('#submit').click();
    }
});

// Input Mask
$("#bday").inputmask({ mask: "99-99-9999" });

// Logic
$("#submit").click(function() {
  // Icons
  var arrow = $(".divider>.fa-arrow-right");
  var x = $(".divider>.fa-times");
  
  // Warnings
  var warning = "<span class='input-warning'>Invalid input. Please try again.</span>"
  
  // Birthday ranges
  var date1 = "1930-01-01";
  var date2 = "1940-01-01";
  var date3 = "1950-01-01";
  var date4 = "1960-01-01";

  // Enrollment period beginnings
  var enp1 = "[date 1 goes here]";
  var enp2 = "[date 2 goes here]";
  var enp3 = "[date 3 goes here]";
  var enp4 = "[date 4 goes here]";

  // Get user input
  var date = $("#bday")
    .val()
    .split("-");

  // Covert date format
  var newDate = date[2] + "-" + date[0] + "-" + date[1];
  console.log(date);
  console.log(newDate);

  // Check for undefined variable
  if ($('#bday').val() === "") {
    $('#app-container').append(warning);
    return false;
  } else {
    $('.input-warning').hide();
    
    // Date comparison
    if (newDate <= date1) {
      $("#enrollment").text("Your enrollment period began a looooong time ago");
      arrow.hide();
      x.fadeIn();
    } else if (newDate >= date1 && newDate <= date2) {
      x.hide();
      arrow.fadeIn().animate({ marginLeft: 0 });
      $("#enrollment").text("Your enrollment period begins on " + enp1);
    } else if (newDate >= date2 && newDate <= date3) {
      x.hide();
      arrow.fadeIn().animate({ marginLeft: 0 });
      $("#enrollment").text("Your enrollment period begins on " + enp2);
    } else if (newDate >= date3 && newDate <= date4) {
      x.hide();
      arrow.fadeIn().animate({ marginLeft: 0 });
      $("#enrollment").text("Your enrollment period begins on " + enp3);
      // For some reason the condition below is firing even though newDate is undefined
    } else if (newDate >= date4) {
      arrow.hide();
      x.fadeIn();
      $("#enrollment").text("Millenials aren't elegible for medicare, silly").fadeIn(500);
    } else {
      arrow.hide();
      x.fadeIn();
    }
  }
});
::placeholder {
  color: graytext;
}

body {
  display: grid;
  justify-items: center;
  align-items: center;
  height: 100vh;
  font-family: sans-serif;
  text-align: center;
}

h2 {
  color: #2780bc;
  font-size: 1.5em;
  margin-top: 0;
}

#app-container {
  max-width: 800px;
  display: grid;
  grid: 1fr 35px / 1fr 100px 1fr;
  grid-row-gap: 30px;
}

#form-wrapper {
  display: grid;
  justify-items: center;
  grid-column: 1;
  border: 2px solid #ececec;
  padding: 20px;
  border-radius: 5px;
}
#form-wrapper form {
  display: grid;
  grid: auto / 1fr;
  width: 210px;
}
#form-wrapper #bday {
  width: 200px;
  height: 50px;
  font-size: 1.9em;
  text-align: center;
  color: #666;
  margin: 0 auto;
  border-radius: 3px;
  border: 1px solid transparent;
  border-top: none;
  border-bottom: 1px solid #ddd;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.39), 0 -1px 1px #fff, 0 1px 0 #fff;
}
#form-wrapper #submit {
  height: 50px;
  color: #fff;
  background-color: #2780bc;
  border-radius: 5px;
  font-size: 1em;
}

.divider {
  display: grid;
  grid-column: 2;
  justify-items: center;
  align-items: center;
}
.divider .fa-arrow-right {
  display: none;
  color: green;
  font-size: 3em;
  margin-left: -20px;
}
.divider .fa-times {
  display: none;
  color: indianred;
  font-size: 3em;
}

#output {
  display: grid;
  grid: 80px 1fr / 1fr;
  align-items: start;
  grid-column: 3;
  border: 2px solid #ececec;
  padding: 20px;
  border-radius: 5px;
}
#output h2 {
  margin-bottom: 0;
}
#output #enrollment {
  display: none;
}

.input-warning {
  grid-row: 2;
  grid-column: 1 / -1;
  border: 2px solid indianred;
  color: indianred;
  width: 250px;
  justify-self: center;
  padding: 5px;
  border-radius: 5px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.7.2/css/all.min.css" rel="stylesheet"/>
<div id="app-container">
  <div id="form-wrapper">
    <h2 class="text" value="title">Enter your birthday</h2>
    <br>
    <form>
      <input id="bday" placeholder="mm-dd-yyyy" name="bday" type="text"/>
      <br>
      <button id="submit" type="button">SUBMIT</button>
    </form>
  </div>
  <div class="divider"><i class="fas fa-arrow-right"></i><i class="fas fa-times"></i></div>
  <div id="output">
    <h2>Your medicare enrollment period begins:</h2>
    <span id="enrollment"></span>
  </div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/3/jquery.inputmask.bundle.js"></script>

【问题讨论】:

  • 这个表格是动态的吗?处理输入而不是文档的keyup 事件会更简单。
  • 确实如此,我稍后会解决这个问题。这不是我真正关心的时刻。
  • 这不应该被标记为重复,这就是原因。我正在谷歌搜索我正在经历的症状。起初我没有意识到它正在重新加载页面。许多开发人员,尤其是像我这样的新开发人员并不总是确切地知道为什么会出现问题。这篇文章应该留下来帮助人们找到正确的答案,这样他们在寻找相同的症状时就不会再问同样的问题了。
  • 帖子还在。它与您自己链接的上一个问题相关联。任何找到正确帖子的人都会找到答案。任何发现此内容的人都将拥有此和您链接的帖子。这是重复的。

标签: javascript jquery


【解决方案1】:

我在这里找到了答案How do I make an HTML button not reload the page

我使用了&lt;button&gt;,因此单击提交按钮不会刷新页面,但如果&lt;button&gt; 在&lt;form&gt; 中,Chrome 显然会刷新。我将&lt;form&gt; 更改为&lt;div&gt;,当我按下回车时它不再刷新。

【讨论】:

  • 嗯,这是一个有趣的反对意见,因为这实际上是我问题的答案,哈哈。
【解决方案2】:
$(document).keyup(function(e) {
    if ($("#bday").is(":focus") && e.which == 13) { // 13 is the keycode for Enter
        e.preventDefault();
        $('#submit').click();
    }
});

空白屏幕的原因是您正在向自己提交表单。 表单内的任何输入都将被提交,同时按下回车键。

【讨论】:

  • 那么我怎样才能将输入提交到我的 jQuery 函数而不出现空白屏幕?
  • 从函数返回 false 直到日期正确,返回 false 会阻止表单提交。
  • 我不认为你真的看过我的代码...我正在使用&lt;button&gt; 元素,这样它就不会提交。但我想通了。答案在上面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2014-03-04
相关资源
最近更新 更多