【问题标题】:How to return an input field back to its default behaviors?如何将输入字段返回到其默认行为?
【发布时间】:2017-01-25 20:39:07
【问题描述】:

我正在开发一个默认情况下在输入字段中阻止退格的网站,但对于这个特定的输入,我想将其恢复为默认行为以接受 退格

最简单的方法是什么?基本上我需要preventDefault()的反面。

更新:我在评论中添加了以下消息,但认为这对问题很重要。所以这里是:

不幸的是,我不知道它如何防止 退格。我正在创建一个 Chrome 扩展程序,它将一个输入字段注入到页面中。除了 backspace 外,一切正常。我试图找到阻止它的代码,但这是不可能的。

我创建字段的代码是这样的:

if(!document.getElementById("input_typing")){
        var input = document.createElement('input');
        input.id = "input_typing";
        input.tabIndex = 1;
input.style.width = "95%";
        input.focus();
        txts[i].parentNode.appendChild(input);
}

【问题讨论】:

  • 关闭javascript)
  • 说正经的 - 首先提供更多细节(至少它如何防止退格)
  • 类似 $(this).unbind('submit').submit();
  • 不幸的是,我不知道它是如何防止退格的。我正在创建一个 chrome 扩展,它将一个输入字段注入到页面中。除了退格之外,一切正常。我试图找到阻止它的代码,但这是不可能的。

标签: javascript dom-events


【解决方案1】:

我的想法是:可以在文档上附加一个处理程序,以便 *site 防止退格 *

我不确定这一点,但我创建了一个 sn-p 来阐明我的想法:

如果事件处理程序阻止退格上的默认操作,您可以为新创建的输入字段添加新的事件处理程序以停止传播。

//
// Let's assume this is the site handler to prevent backspace
//
document.addEventListener('keydown', function(e) {
  if (e.which === 8) {
    e.preventDefault();
  }
});


//
// your new element
//
if(!document.getElementById("input_typing")){
  var input = document.createElement('input');
  input.id = "input_typing";
  input.tabIndex = 1;
  input.style.width = "95%";
  input.focus();
  document.querySelectorAll('input[type="text"]')[0].parentNode.appendChild(input);

  //
  // Add the keydown event handler to stop propagation
  //
  input.addEventListener('keydown', function(e) {
    e.stopPropagation();
  });
}
<form action="action_page.php">
    First name:<br>
    <input type="text" name="firstname" value="Mickey">
    <br>
    Last name:<br>
    <input type="text" name="lastname" value="Mouse">
    <br><br>
    <input type="submit" value="Submit">
</form>

【讨论】:

  • 我认为没有解决方案,但你做到了。太感谢了。我需要记住 e.stopPropagation();
  • @Johnny 我很高兴你
【解决方案2】:

如果是防止退格的 JavaScript 文件:

您可以在添加 js 文件(包含防止输入字段中的退格的代码)后直接在页面中执行内联脚本。

这样 JS 就会被包含进来——它会禁用退格。 当您执行内联脚本以启用以前的功能时发布此内容 - 您的脚本代码将覆盖包含的 js

如果是防止退格的 CSS 文件:

您可以在每一行的末尾使用 !important 使用内联 css 脚本,以便覆盖现有的 css。

注意:最好在页面末尾添加您的 css/js 内联脚本代码,以提供确定性并避免混淆。

【讨论】:

  • 你可以用 CSS 防止退格吗?我不知道。启用先前功能的内联脚本是什么样的?
  • 你只需要在上一页添加你的代码并再次映射到输入字段。
  • 假设说您的输入(使用 class="inputField1")以前允许 25 个字符,而现在,由于某些包含的 js 只允许 5 个字符,您可以这样做。将这样的代码添加到页面末尾&lt;script type="text/javascript"&gt; $(document).ready(function(){ $('.inputField1').attr("maxLength",25); }); &lt;/script&gt;
  • 你说的是最大长度。我的问题完全不同。当我按退格键时,输入字段完全忽略它。我必须使用删除键来删除字符。
  • 假设您的输入是 id = "mytextarea",当添加到内联脚本 document.getElementById('mytextarea').addEventListener('keydown', function(e){ if (e.which == 8){ e.preventDefault(); return true; } }, false); 时,下面的代码将起到启用 退格 的作用
猜你喜欢
  • 2013-12-08
  • 2015-12-07
  • 1970-01-01
  • 2021-12-05
  • 2020-02-06
  • 2018-11-24
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多