Javascript return gridview 中包含的文本框中的正确时间格式

Javascript return correct time format in textbox contained in gridview

我正在尝试让在文本框中输入的时间自动更正,如果它发现自己缺少 : 字符。 所以当用户退出文本框时 0100 变为 01:00

它也包含在网格视图中。

这是我尝试过的方法,但我没有得到任何结果。

 function four_digit_clock() 
   {
       var grdvw = document.getElementById('<%= grd_issue_am.ClientID %>');

       for (var rowId = 1; rowId < grdvw.rows.length; rowId++) {
           var txtbx = grdvw.rows[rowId].cells[0].children[0];
           if (txtbx != "" || txtbx.length != 0 || txtbx != null) {
               if (txtbx.length == 4) {
                   var clock = txtbx.value;

                   if (clock.substring(2, 1) != ':') {
                       txtbx.value = txtbx.value.substring(0, 2) + ':' + txtbx.substring(2, 2);
                   }
               }
           }
       }  
   }  

 **html**

 <asp:TextBox runat="server" ID="txt_grd_am_clock_in" onblur ="javascript: four_digit_clock();"/>

我是完全找错树了还是漏掉了什么?

子字符串的工作原理是这样的 substring(startpos,endpos)。请注意 endpos 与字符串长度不同!示例:a="1234" 使 a.stringpos(1,3) -> "23"

所以你的评论(clock.value.length-2,2)仍然是错误的。你的意思可能是 substring(clock.value.length-2, clock.value.length).

这也意味着你的 clock.substring(2, 1); 是错误的。 (它实际上是可逆的:clock.substring(1, 2); 是一回事!。)你想要的是 clock.substring(2, 3);。 (假设字符串如“15:30”)。


接下来让事情变得更简单。您可以使用 this 关键字来定位文本框:我可能会这样做:

 onblur="this.value=four_digit_clock(this.value);" 

function four_digit_clock( val ){
   if (val.length < 4 || val.substring(2,3) == ":" ) {
       return val;
   }
   return val.substring(0, 2) + ':' + val.substring(2, 4);
} 

我还没有在 c# 上下文中尝试过,但是 javascript 有效。 http://jsfiddle.net/mg4gwkmb/