2015-10-07 99 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