2015-10-07 62 views
1

我在ASP:Repeater的中有此htmlInput,我希望在其keypress上以时间格式(例如:13:39)对其进行格式化。到目前为止,我有这样的代码在转发数据绑定:使用javascript在HTMLInput中为字符串添加字符

Protected Sub rpt_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rpt.ItemDataBound 
     If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then 
      Dim txt As HtmlInputText = DirectCast(e.Item.FindControl("txtKmRun"), HtmlInputText) 
      If txt IsNot Nothing Then 
       txt.Attributes.Add("onkeypress", "return kmRun('" & txt.Value & "');") 
      End If 
     End If 
End Sub 

..和这是在JavaScript:

<script> 
     function kmRun(myValue) { 
      String x = myValue; 
      x = x.substring(0, 2) + ":" + x.substring(2, x.length()); 
      alert(x); //alert to test display but is not working 
      //HOW TO PASS x VALUE TO BACK TO THE TEXTBOX? 
     } 
</script> 

测试onkeypress属性用一个简单的警报消息和它的工作,但是当与修改价值传递,没有回报价值。所以我猜,错误从那里开始。

其他问题是当部分工作时,如何将“已转换”字符串值返回到htmlInput?有没有其他解决方案可以解决这个问题,不会使用PostBack

谢谢。

===================

这是工作代码:

Protected Sub rpt_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rpt.ItemDataBound 
     If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then 
      Dim txt As HtmlInputText = DirectCast(e.Item.FindControl("txtKmRun"), HtmlInputText) 
      If txt IsNot Nothing Then 
       txt.Attributes.Add("onkeypress", "return kmRun(this);") 
      End If 
     End If 
End Sub 

<script> 
     function kmRun(x) { 
      if (x.value.length > 2) { 
       x.value = x.value.substring(0, 2) + ":" + x.value.substring(2, x.value.length); 
      } 
     } 
</script> 

回答

1

你并不需要声明另一个变量,您可以使用myValue参数。

我建议使用onchange="kmRun(this)"而不是onkeypress="kmRun(this)",因为您必须更改内容,最终才能由代码格式化。

通过使用this,您可以获得textBox控件的所有属性。

你可以尝试这样的事情,在你的JavaScript代码:

function kmRun(control) { 
 
    control.value = control.value.substring(0, 2) + ":" + control.value.substring(2, control.value.length); 
 
}
<input id="txt" type="text" onchange="kmRun(this)" value="" />

+0

谢谢你,先生!现在正在工作。 – eirishainjel

+0

不客气@eirishainjel。如果您需要更多帮助,您可以随时问。 :) –

+1

是的。再次感谢! – eirishainjel

1

有一些问题,你的逻辑。

  • 你发送txt.ValueItemDataBound内,但在你的HTML渲染时这将是一个固定值,因为它不会在用户键入时进行更新。您必须更改的是:以上

    txt.Attributes.Add("onkeypress", "return kmRun(this.value);") 
    

    关键字this指的是你input,每当用户类型,它会得到更新。

  • Javascript不是一种输入语言,也没有String x =声明。您必须使用:

    var x = myValue; 
    
  • 你应该不要直接验证,如果现场有超过两个字符使用.substring(0, 2),因为如果没有,浏览器会抛出一个错误。

  • 您正在使用.length,因为它是一种方法,但它是一种属性。不要使用括号()


最后,传值回你TextBox,你可以这样做:

this.value = x; 
+0

只是把this.value = x;在JavaScript函数的末尾?对不起,我对JavaScript并不熟悉。 – eirishainjel

+0

@eirishainjel是的,就是这样。 – Buzinas

+0

谢谢您的提问,先生! :d – eirishainjel