简体   繁体   English

在按键事件中,如何将','更改为'〜'

[英]On keypress event, how do I change a ',' to a '~'

I have to prevent Coldfusion's default list delimiter ',' from being entered into a form input array. 我必须防止Coldfusion的默认列表分隔符','被输入到表单输入数组中。 I am new to using javascript for validation purposes, and have never tried to switch out the values someone is typing in. How can I snag a comma, and replace it with a tilda? 我是新手使用javascript进行验证,并且从未尝试切换某人输入的值。我怎么能抓住一个逗号,并用tilda替换它?

Javascript i've tried so far: 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 involved: 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>

if I alter CatagoryService.cfc?method=saveVersion to <cfreturn arguments> in a JSON string, a typical response from Coldfusion looks like: 如果我在一个JSON字符串<cfreturn arguments> ?method = saveVersion改为<cfreturn arguments> ,Coldfusion的典型响应如下:

{VERSION:"",name:"name1,name2",min:"1,3", max:"2,4",id:"1,2"}

I put your HTML on jsfiddle (you can test it there) and added this JavaScript, using a selector that matches all and elements: 我把你的HTML放在jsfiddle (你可以在那里测试)并添加这个JavaScript,使用匹配所有和元素的选择器:

$(document).ready(function(event){
    $(document).delegate("input, textarea", "keyup", function(event){
        if(event.which === 188) {
            var cleanedValue = $(this).val().replace(",","~");
            $(this).val(cleanedValue);
        }
    });
});

All commas in the value string are replaced by a tilde if a comma (code 188) was entered. 如果输入了逗号(代码188),则值字符串中的所有逗号将替换为代字号。

Remember that JavaScript validation is nothing you want to rely on. 请记住,JavaScript验证不是您想要依赖的。 The commas can easily be send to the server or never get replaced, eg in a user agent with JavaScript disabled. 逗号可以很容易地发送到服务器或永远不会被替换,例如在禁用JavaScript的用户代理中。

I replaced the name[] .live() event.which = 126; 我替换了名称[] .live() event.which = 126; to event.originalEvent.keyCode=126; to event.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 I upped your keyUp solution as well. wolfram我也提升了你的keyUp解决方案。

Imho, there's no need to check those keyCodes: Imho,没有必要检查这些keyCodes:

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

Check it on jsFiddle . jsFiddle上查看它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM