Javascript 在按键事件中,如何更改'';到a'~';

Javascript 在按键事件中,如何更改'';到a'~';,javascript,jquery,coldfusion-9,Javascript,Jquery,Coldfusion 9,我必须防止将Coldfusion的默认列表分隔符“”输入表单输入数组。我不熟悉使用javascript进行验证,也从未尝试过切换别人输入的值。我怎样才能找到一个逗号,并用tilda替换它 到目前为止我已经尝试过的Javascript: $(document).ready(function(event){ var regExComma = /,/; $("[name='name[]']").live("keypress",function(event){ // i

我必须防止将Coldfusion的默认列表分隔符“”输入表单输入数组。我不熟悉使用javascript进行验证,也从未尝试过切换别人输入的值。我怎样才能找到一个逗号,并用tilda替换它

到目前为止我已经尝试过的Javascript:

    $(document).ready(function(event){
      var regExComma = /,/;
      $("[name='name[]']").live("keypress",function(event){
// i know i could check the numerical value, i feel this requirement can get more added to it and I would like to just change the regEx accordingly.
        if(regExComma.test(String.fromCharCode(event.which)){
//it was a ',' switch it to '~'
         event.which = 126;
        }
      });
// added to show that the 'name' input form array is the only input that cares about the ','
    var regExDig = /[\d]/
    $("[name=min[]],[name=max[]]").live(keypress, function(event){
       if(!regExDig .test(String.fromCharCode(event.which)){
        event.preventDefault();
        $("#cfocFormMessages").trigger("updateMessages", {"url":"components.cfc/CFOC.cfc", "data":{"more":"stuff"}});
       }
    });
            });
涉及的cfml/html:

<form action="components/CatagoryService.cfc?method=saveVersion">
<input id="version" name="version" type="text">
<!--- .. more inputs ..--->
<table id="table">
  <thead><tr><th>name col</th>
  <th>min col</th>
  <th>max col</th>
  <th>edit</th>
</tr></thead>
  <tfoot></tfoot>
  <cfoutput query="variables.query">
  <tr><td><input name="name[]" type="text" value="#variables.query.name#"></td>
   <td><input name="min[]" type="text" value="#variables.query.min#"></td>
   <td><input name="max[]" type="text" value="#variables.query.max#"></td>
   <td><input name="id[]" type="hidden" value="#variables.query.id#">
     <a href="#" class="editLink">edit</a></td>
  </tr>
  </cfoutput>
  <tr><td></td><td></td><td><a href="#" class="addLink">add</a></td></td></tr>
</table>
<input type="Submit"/>
</form>
我放置(您可以在那里进行测试)并添加了此JavaScript,使用匹配所有和元素的选择器:

$(document).ready(function(event){
    $(document).delegate("input, textarea", "keyup", function(event){
        if(event.which === 188) {
            var cleanedValue = $(this).val().replace(",","~");
            $(this).val(cleanedValue);
        }
    });
});
如果输入了逗号(代码188),则值字符串中的所有逗号都将替换为波浪号

请记住,JavaScript验证不是您想要依赖的。逗号可以很容易地发送到服务器,或者永远不会被替换,例如在禁用JavaScript的用户代理中。

我使用匹配所有和元素的选择器放置(您可以在那里测试)并添加此JavaScript:

$(document).ready(function(event){
    $(document).delegate("input, textarea", "keyup", function(event){
        if(event.which === 188) {
            var cleanedValue = $(this).val().replace(",","~");
            $(this).val(cleanedValue);
        }
    });
});
如果输入了逗号(代码188),则值字符串中的所有逗号都将替换为波浪号


请记住,JavaScript验证不是您想要依赖的。逗号可以很容易地发送到服务器或永远不会被替换,例如在禁用JavaScript的用户代理中。

我替换了名称[].live()
event.which=126
事件.originalEvent.keyCode=126

var regExComma = /,/;
$("[name='name[]']").live("keypress",function(event){
     if(regExComma.test(String.fromCharCode(event.which)){
       //this line works as expected. and will swap out the value on keypress.
       if(event.originalEvent.keyCode){
         event.originalEvent.keyCode=126;
       }else if(event.originalEvent.charCode){
         event.originalEvent.charCode=126;
       }
     }
});

wolfram我也增加了您的密钥设置解决方案。

我替换了名称[].live()
event.which=126
事件.originalEvent.keyCode=126

var regExComma = /,/;
$("[name='name[]']").live("keypress",function(event){
     if(regExComma.test(String.fromCharCode(event.which)){
       //this line works as expected. and will swap out the value on keypress.
       if(event.originalEvent.keyCode){
         event.originalEvent.keyCode=126;
       }else if(event.originalEvent.charCode){
         event.originalEvent.charCode=126;
       }
     }
});

wolfram我也提供了您的密钥加密解决方案。

我知道,没有必要检查这些密钥码:

 $(document).ready(function(event){
    $('#fieldName').keyup(function(event) {
        var cleanedValue = $(this).val().replace(",","~");
        $(this).val(cleanedValue);
    });
});

打开它。

哦,没有必要检查那些钥匙码:

 $(document).ready(function(event){
    $('#fieldName').keyup(function(event) {
        var cleanedValue = $(this).val().replace(",","~");
        $(this).val(cleanedValue);
    });
});

检查它。

如果用户覆盖您的检查并输入逗号,会发生什么情况?这会是一个安全问题吗?如果是这样,你需要检查服务器和客户端。我也在检查服务器。也就是说,“name:”name1,name2“coldfusion列表将比“min”和“max”列表长。我将添加代码以显示正在进行的其他验证。如果用户覆盖您的检查并输入逗号,会发生什么情况?这会是一个安全问题吗?如果是这样,你需要检查服务器和客户端。我也在检查服务器。也就是说,“name:”name1,name2“coldfusion列表将比“min”和“max”列表长。我将添加代码来显示正在进行的其他验证。同意,因此,我不喜欢JS验证,并且在服务器之前也必须进行清理。此解决方案在一直启用JS的环境中运行。我将切换到keyup,看看它是如何运行的!返回的“which”代码由jQuery规范化,但您可能希望跨浏览器再次检查。此外,“keypress”事件返回ASCII码(44),而keydown/keyup返回keyCode(188)。或者完全忽略该检查并始终清除字符串。@DefyGravity:请记住,即使您可以确保JavaScript始终处于启用状态,您在JavaScript中执行的任何输入验证在安全性方面都不会给您带来任何好处。它所做的只是一种方便的方式,让优秀的用户在提交表单之前知道他们写错了什么。任何恶意用户都可以注入关闭验证的JavaScript,或者让验证完成其工作,并使用篡改数据插件或类似的东西。这种特殊的验证甚至可以被简单的复制和粘贴所击败。始终使用服务器端验证,即使JS始终处于打开状态。同意,因此,我不喜欢JS验证,也必须在服务器之前进行清理。此解决方案在一直启用JS的环境中运行。我将切换到keyup,看看它是如何运行的!返回的“which”代码由jQuery规范化,但您可能希望跨浏览器再次检查。此外,“keypress”事件返回ASCII码(44),而keydown/keyup返回keyCode(188)。或者完全忽略该检查并始终清除字符串。@DefyGravity:请记住,即使您可以确保JavaScript始终处于启用状态,您在JavaScript中执行的任何输入验证在安全性方面都不会给您带来任何好处。它所做的只是一种方便的方式,让优秀的用户在提交表单之前知道他们写错了什么。任何恶意用户都可以注入关闭验证的JavaScript,或者让验证完成其工作,并使用篡改数据插件或类似的东西。这种特殊的验证甚至可以被简单的复制和粘贴所击败。始终使用服务器端验证,即使JS始终处于打开状态。请记住,这不会给您任何安全性。如果用户复制并粘贴一些无效的输入,它甚至不起作用。始终在服务器端执行验证。另请参阅我对Wolfram回答的评论。@Zed理解,这是与服务器端验证一起进行的,它有自己的一组错误消息。对我来说不起作用。Chrome拒绝更改keyCode/charCode。设置后,它仍然是相同的keyCode和charCode是只读的,请参阅文档。请记住,这不会给您任何安全性。如果用户复制并粘贴一些无效的输入,它甚至不起作用。始终在服务器端执行验证。另请参阅我对Wolfram回答的评论。@Zed理解,这是与服务器端验证一起进行的,它有自己的一组错误消息。对我来说不起作用。Chrome拒绝更改keyCode/charCode。设置后,它仍然是相同的keyCode和charCode是只读的,请参阅文档