代码之家  ›  专栏  ›  技术社区  ›  Hexagon Theory

纯粹作为一个实验,我试图使它绝对不可能做任何事情,除了输入更多的数据到一个输入字段;可行吗?

  •  1
  • Hexagon Theory  · 技术社区  · 16 年前

    我想我已经走得很近了,但似乎不能涵盖 单一的 下面列出的其中一条战线:

    • 由于各种原因,禁止使用backspace、delete、left arrow key、home key和ctrl(如果同时按住两个键会造成混乱,那么所有这些都很难实现)
    • 确保用户不能退出该字段,然后重新输入除END以外的loation( onfocus onclick 属性包括此)
    • 强悍之处:每次成功添加字符时都要记住该值,这样,如果用户决定用通过位置栏注入的javascript代码修改该值,则可以恢复原始数据。

    鉴于这样做几乎没有实际意义(老实说,是零),我只是把它当作知识的展示。唉,看来我还不够,不过,下面是我正在参考的代码:

    <input id="test" />
    <script>
    var d = '', kd = 0;
    cancel = function(event)
     {
        event.target.value = '';
        event.target.value = d;
     };
    handle_up = function(event)
     {
        if (event.keyCode == 36 || event.keyCode == 37) // home, left
         {
            kd = 0;
            cancel(event);
            event.target.value = d;
         }
        if (event.keyCode != 8 && event.keyCode != 46)  // backspace and delete
            d = event.target.value;
        else    // backspace
            event.target.value = d; // set to stored ("cached") value
     };
    handle_down = function(event)
     {
        if (kd == 1)
         {
            cancel(event);
            return false;
         }
        if (event.keyCode == 36 || event.keyCode == 37)
         {
            kd = 1;
            cancel(event);
         }
        if (event.keyCode == 8 || event.keyCode == 46)
         {
            kd = 1;
            cancel(event);
         }
     };
    HTMLElement.prototype.perma = function()
     {
        this.setAttribute('onfocus', 'cancel(event)');
        this.setAttribute('onclick', 'cancel(event)');
        this.setAttribute('onkeyup', 'handle_up(event)');
        this.setAttribute('onkeydown', 'handle_down(event)');
     };
    $('#test').perma();
    </script>
    

    再说一次,尽管这只是为了新奇,但我认为看到获得输入框来拒绝除数据输入之外的任何操作所需的聪明是非常酷的。

    3 回复  |  直到 13 年前
        1
  •  1
  •   Ólafur Waage    16 年前

    顺便说一下,这是为了好玩。你有没有试着做一个你能进入的白名单,而不是一个你不能做的黑名单。

        2
  •  1
  •   Raithlin    16 年前

    检查输入的数据,对新输入进行比较,拒绝任何不是已经存在的扩展的内容,怎么样?可能有点长,特别是当磁场变长时,但有效吗?

        3
  •  1
  •   belugabob    16 年前

    另一个需要考虑的问题是,验证方案(如您所描述的方案)不应该纯粹在客户端进行。

    例如,如果javascript被禁用,则有人可能提交未验证的数据。如果发生这种情况,服务器端代码将使用它,并且您正在测试的条件将不会被注意到。

    始终使用服务器上的相同验证备份客户端验证。