【问题标题】:how to implement uppercase conversion in jqgridjqgrid中如何实现大写转换
【发布时间】:2011-12-23 00:22:16
【问题描述】:

生产者代码只能包含大写字符。如果输入小写字符,jqgrid 不会将它们转换为大写,没有这个选项。 如何在文本字段的内联和表单编辑模式下强制 jqgrid 中输入的字符大写转换?

更新

我在How can I force input to uppercase in an ASP.NET textbox? last answer 找到了代码。此代码在按键中将输入的字符更改为大写。通过在jqgrid编辑控件中添加keyprees事件处理程序来使用它是否合理?

function ToUpper() { 
        // So that things work both on FF and IE 
        var evt = arguments[0] || event; 
        var char = String.fromCharCode(evt.which || evt.keyCode); 

        // Is it a lowercase character? 
        if (/[a-z]/.test(char)) { 
            // convert to uppercase version 
            if (evt.which) { 
                evt.which = char.toUpperCase().charCodeAt(0); 
            } 
            else { 
                evt.keyCode = char.toUpperCase().charCodeAt(0); 
            } 
        } 

        return true; 
    } 

这样使用:

   <asp:TextBox ID="txtAddManager" onKeyPress="ToUpper()" runat="server"  
         Width="84px" Font-Names="Courier New"></asp:TextBox> 

【问题讨论】:

  • 我想要 JQgrid 的添加形式的正则表达式验证。我该怎么做?

标签: javascript jquery jqgrid uppercase


【解决方案1】:

尝试:

 $(document).ready(function(){
          $("div").text("lower case.");
          var UCASE =  $("div").text($("div").text().toUpperCase());
          alert(UCASE);
    });

或

$(document).ready(function(){    
   var strVal = 'lowerCase!!' ;  
   alert(strVal.toUpperCase()); 
});

【讨论】:

  • 谢谢。我询问将输入或粘贴的字符转换为大写。我更新了问题并提供了根据 Oleg 不起作用的示例代码。如何使它发挥作用或任何其他想法?
  • 我想要 JQgrid 的添加形式的正则表达式验证。我该怎么做?
【解决方案2】:

首先你可以使用CSS样式text-transform: uppercase来显示用户输入的大写数据:

editoptions: { dataInit: function (el) { $(el).css('text-transform', 'uppercase'); }}

该设置不会更改数据本身。所以你必须另外进行相应的修改。在表单编辑的情况下,您可以使用beforeSubmit。例如,让我们有列'name',您需要将其保留为大写。然后你先在dataInit中添加text-transform: uppercase的设置(见上)并添加

beforeSubmit: function (postData) {
    postData.name = postData.name.toUpperCase();
    return [true, ''];
}

在内联编辑的情况下,没有beforeSubmit 回调函数。所以如果你有远程数据,你可以使用serializeRowData:

serializeRowData: function (postData) {
    postData.name = postData.name.toUpperCase();
    return postData;
}

如果使用editurl: 'clientArray',您可以修复editRow和saveRow的aftersavefunc参数中的数据:

aftersavefunc: function (rowid) {
    var $grid = $(this),
        newName = $grid.jqGrid("getCell", rowid, 'name');
    $grid.jqGrid("setCell", rowid, 'name', newName.toUpperCase());
}

见the demo。

【讨论】:

  • 谢谢。我希望有一种方法可以在所有编辑模式下为输入元素添加 keydown 事件处理程序,并在此事件中将小写字母转换为大写字母。用户可以在运行时设置大写选项。您的答案需要在运行时生成 editoptions、beforeSubmit、serializeRowData 代码。请确认使用keydown进行转换是不合理的,所以我可以试试你的答案。或者也许改为在服务器中实现转换。
  • @Andrus:我无法完全关注你。 “在运行时设置大写选项”和“在运行时生成......代码”是什么意思。如果您有用户可以在运行时设置的选项(或变量),您可以在dataInit、beforeSubmit 或serializeRowData 的代码中测试选项(变量)并激活或不激活大写转换。问题是什么。您的其他问题“请确认使用 keydown 进行转换是不合理的”我根本无法理解。我不能保证您找不到仅使用 keydown 的实现。
  • 我更新了关于使用按键的问题。这合理吗。使用可以为数据库中的列定义设置大写选项。应用程序代码应检查此值并在运行时生成适当的 jqgrid 定义。这涉及在 3 个不同的地方生成编码,同时使用 keypress 只需要添加 keypress 事件处理程序。如果使用 ctrl+V 命令粘贴文本,则不确定按键处理程序是否有效,但也许粘贴命令也可以在输入元素中处理某些事件
  • @Andrus:你测试过你发布的代码吗?在我在纯 JavaScript 环境中的测试中它不起作用。我向您发布了解决问题的方法。如果您发布另一个适用于任何键盘事件的代码,那对我来说会很有趣。我不知道有任何解决方案可以保存光标插入符号并可以即时修改键盘事件。
  • 根据参考答案中的代码作者,它应该可以工作。你用的是哪个测试用例?也许我应该问关于这个的纯 javascript 问题。有一些可能性:使用您的出色答案,尝试使按键工作,在服务器中的 BeforeSave 和 BeforeInsert 实体方法中的 C# 中实现此功能,在数据库服务器中创建插入和更新触发器。哪种方式最好?
猜你喜欢
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 2012-05-28
  • 1970-01-01
  • 2013-09-26
相关资源
最近更新 更多