2017-05-25 56 views
1

我的目標是每當我插入到textbox1中,它都會自動在TextBox2中更新。我不想使用「輸入標籤」或回發。請僅在下面的代碼中糾正:)如何通過asp.net C#控制ID在Javascript函數中的多個參數

<script type="text/javascript"> 
     function OneTextToother1(a, b) { 
      alert(a.value); //it render correct value 
      alert(b.value); // it is undefined 
      document.getElementById(b).value = document.getElementById(a).value 
     } 
    </script> 


<asp:TextBox ID="txtFirst" runat="server" onkeyup="OneTextToother1(this, ' <%= txtSecond.ClientID %>');" ></asp:TextBox>  
<asp:TextBox ID="txtSecond" runat="server"></asp:TextBox> 

正如John Answer所示。我能夠實現他的建議。請僅修改上述代碼。我想要有通用的JS函數,並且在asp文本框聲明中,我將傳遞源和目標clientID。它可以實現嗎?

+1

'a'是一個DOM節點,'b'是一個字符串(帶有前導空格) – Andreas

+0

'FirstTextBox.nextElementSibling = secondTextBox',你不需要傳遞第二個'textbox'。 –

回答

1

變化的onkeyup到:

onkeyup="OneTextToother1();" 

然後JavaScript可以僅僅是:

function OneTextToother1() { 
      document.getElementById('<%= txtSecond.ClientID %>').value = document.getElementById('<%= txtFirst.ClientID %>').value; 
     } 

希望它可以幫助

編輯:

變化的onkeyup到:

onkeyup="OneTextToother1(this, 'txt_delivery');" 

哪裏txt_delivery是要改變

控件的ID,我們則需要修改的JavaScript。

的OneTextToother的樣子:

function OneTextToother1(a, b) { 
      document.getElementById(findItemInArray(b)).value = a.value; 
     } 

我們需要添加額外的功能:

function findItemInArray(b) { 
      var items = [ 
       ['txt_delivery', '<%= txt_deliverydate.ClientID %>'], 
       ['txt_route', '<%= txt_route.ClientID %>'] 
      ]; 
      for (var k = 0; k < items.length; k++) { 
       if (items[k][0] === b) { 
        return items[k][1]; 
       } 
      } 
     } 

既然無法通過的ClientID給JavaScript函數最好給每個ASP的控制存儲在javascript數組。

var items保存ASP控件的名稱,然後獲取客戶端ID的方法。然後,我們遍歷數組來查找傳入的參數。我不相信有一種更簡單的解決方案來支持多種控件。

您只需將每個c#控件添加到javascript函數,然後通過控件名稱。

如果這回答你的問題,Id讚賞標記爲正確的。

+0

我能夠實現,但有20個主要文本框需要被複制到onkeyup上的輔助文本框中,我想要具有通用的JavaScript函數,將control.ClientId作爲參數,並在asp文本框聲明中,我將通過源代碼和目標客戶端ID。它可以實現嗎? –

+0

檢查更新的解釋 –

相關問題