2015-06-02 2 views
1

Я создаю текстовые поля динамически, так как вызывать функцию javascript для события «onchange» в текстовом поле?Как написать Javascript-код в коде C#?

<script type="text/javascript"> 
    debugger; 
    function myFunction() { 
     var btn = document.getElementById('<%= temp.ClientID%>').value; 
     var btntemp = document.getElementById('<%= txttemp2.ClientID%>').value; 
     var val = parseInt(btn) + parseInt(btntemp); 
     document.getElementById('<%= TextBox1.ClientID%>').value = val; 
    }   
</script> 
<asp:TextBox ID="temp" runat="server" onchange="myFunction()"></asp:TextBox> 
    <asp:TextBox ID="txttemp2" runat="server" onchange="myFunction()"></asp:TextBox> 

Здесь iam создает текстовое поле динамически.

Table table = (Table)this.Page.FindControl("PlaceHolder1").FindControl("Table1"); 
for (int i = 0; i < rowsCount; i++) 
{ 
    for (int j = 0; j < colsCount; j++) 
    { 
    TextBox tb = (TextBox)table.Rows[i + 1].Cells[j].FindControl("TextBoxRow_" + i + "Col_" + j); 
    tb.Text = Request.Form["TextBoxRow_" + i + "Col_" + j]; 

здесь IAM получать значение текстового поля первого столбца

else if (j == 2) 
{ 
    int quantityText; 
    TextBox quantity = (TextBox)table.Rows[i +1].Cells[j].FindControl("TextBoxRow_" + i + "Col_" + j); 

здесь IAM получения Textboxes второго столбца дорожит

else if (j == 3) 
    { 
    double rateText; 
    TextBox rate = (TextBox)table.Rows[i + 1].Cells[j].FindControl("TextBoxRow_" + i + "Col_" + j); 

здесь IAM генерации динамически текстовые поля.

private void GenerateTable(int rowsCount) 
{ 
    Table table = new Table(); 
      table.ID = "Table1"; 
      PlaceHolder1.Controls.Add(table); 
      for (int i = 0; i < rowsCount; i++) 
      { 
       TableRow row = new TableRow(); 
       row.ID = "Row_" + i; 
       else if (j < colsCount - 1) 
        { 
         TableCell cell = new TableCell(); 
         TextBox tb = new TextBox(); 
         tb.ID = "TextBoxRow_" + i + "Col_" + j; 
         cell.Controls.Add(tb); 
        row.Cells.Add(cell); 
        } 
+0

Почему вам нужно позвонить js в коде позади. Вы можете сделать это, используя scriptmanager, но не работает, что можно использовать. – AkshayJ

+0

Я хочу рассчитать два динамически созданных значения текстовых полей. – Ashwini

+0

Как вы динамически создаете свои текстовые поля, показываете, что мы лучше понимаем, что вы пытаетесь сделать? Вы не можете вызывать функции javascript со стороны сервера, если это то, что вы пытаетесь сделать. –

ответ

0

Я получил свой ответ успешно, который находится внизу. скрипт должен написать как ниже

<script type="text/javascript"> 
      function myFunction() { 
       var btn = document.getElementById('<%= TextBox1.ClientID%>').value; 
       var sum = [0, 1, 2] 
       for (var j = 0; j <= btn; j++) { 
        var elements = document.getElementsByClassName("sum"+j); 
        for (var i = 0, length = elements.length; i < length; i++) { 
         if (elements[i].value) { 
          sum[0] = parseInt(elements[0].value); 
          sum[1] = parseInt(elements[1].value); 
          sum[2] = parseInt(elements[2].value); 
         } 
         elements[2].value = sum[0] * sum[1]; 
        } 
       } 
      }   
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
<div style="display:none"> 
    <asp:HiddenField ID="HiddenField2" runat="server" /> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    </div> </form> 
</body> 
</html> 

и при создании динамически Textboxes нужно добавить класс, к которому мы должны получить значения и вычислить его, а затем показать результат

private void GenerateTable(int rowsCount) 
     { 
      //ContentPlaceHolder content = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1"); 
      TextBox1.Text = rowsCount.ToString(); 
      Table table = new Table(); 
      table.ID = "Table1"; 
      PlaceHolder1.Controls.Add(table); 
      for (int i = 0; i < rowsCount; i++) 
      { 
       TableRow row = new TableRow(); 
       row.ID = "Row_" + i; 
for (int j = 0; j < colsCount; j++) 
       { 
if (j < colsCount - 1) 
        { 
         TableCell cell = new TableCell(); 
         TextBox tb = new TextBox(); 
if (j == 2) 
         { 
          tb.ID = "TextBoxRow_" + i + "Col_" + j; 
          tb.CssClass = "sum"+i; 
          tb.Attributes.Add("onchange", "myFunction();"); 
         } 
         else if (j == 3) 
         { 
          tb.ID = "TextBoxRow_" + i + "Col_" + j; 
          tb.CssClass = "sum"+i; 
          tb.Attributes.Add("onchange", "myFunction();"); 
         } 
         else if (j == 4) 
         { 
          tb.ID = "TextBoxRow_" + i + "Col_" + j; 
          tb.ReadOnly = true; 
          tb.CssClass = "sum"+i; 
         } 
         cell.Controls.Add(tb);      
         row.Cells.Add(cell); 
        } 
table.Rows.Add(row); 
      } 
       SetPreviousData(rowsCount, colsCount);  
      rowsCount++; 
      ViewState["RowsCount"] = rowsCount; 
     } 
0

Вам нужно скрипт, чтобы иметь атрибут runat="server", если ваше текстовое поле делает. Я думаю, что ваш сценарий должен быть C#, чтобы работать таким образом. Вы можете переписать свою исходную функцию как:

<script runat="server"> 
    void textBox_Change(Object sender, EventArgs e) { 
     TextBox1.Text = Int32.parse(temp.Text) +      
      Int32.parse(txttemp2.Text) 
    } 
</script> 
<asp:TextBox ID="temp" runat="server" ontextchanged="textBox_Change" autopostback="true"></asp:TextBox> 
<asp:TextBox ID="txttemp2" runat="server" ontextchanged="textBox_Change" autopostback="true"></asp:TextBox> 

Атрибут вашего обработчика также неверен. Событие для изменения текста в элементе управления TextBox составляет ontextchange="", как показано в приведенном выше коде, а также требуется установить autopostback="true" ... но оно вступит в силу только тогда, когда пользователь изменяет фокус от элемента управления TextBox.

Вы также можете использовать JQuery для чистого яваскрипта обработчика:

$(document).on("change","#temp,#txttemp2",myFunction); 

Это будет обнаруживать изменения в ваши текстовые поля в клиенте и запустить свой метод. Поскольку это делегированный обработчик, он будет захватывать события, даже если элементы не были созданы, когда вы зарегистрировали его изначально. Можно даже установить класс для элементов, так что вам не нужно знать их идентификаторы:

$(document).on("change",".waitingForChangeForMyFunction",myFunction); 

И тогда, когда вы создаете ваши текстовые поля, просто сделать:

TextBox tb = new TextBox(); 
tb.CssClass="waitingForChangeForMyFunction"; 
+0

где написать эту строку кода в коде? потому что текстовые поля, создаваемые в цикле. – Ashwini

+0

и как назначить здесь идентификатор текстового поля. – Ashwini

+0

Ashwini, если вы используете jQuery, вы можете написать эту строку кода в любом месте, но я предлагаю записать ее вне вашего цикла. Вы можете скомпилировать список идентификаторов для передачи в селектор в вашем цикле, а затем зарегистрировать обработчик в конце. –

0

использовать это для вызова Javascript функции в коде позади

ClientScript.RegisterClientScriptBlock(myFunction(), "AlertMsg", "<script> 
           alert('Inserted successfully');</script>", true) 
+0

Где текстовое поле onchange event? – Ashwini

0

вы можете использовать RegisterClientScriptBlock:

String scripts = "function myFunction(clientID) { 
     var btn = document.getElementById('clientID').value; 
     var btntemp = document.getElementById('clientID').value; 
     var val = parseInt(btn) + parseInt(btntemp); 
     document.getElementById('clientID').value = val; 
    }  "; 

ClientScript.RegisterClientScriptBlock(this.GetType(), 
       "CounterScript", scripts, true);  

for (int i = 0; i < rowsCount; i++) 
{ 
    for (int j = 0; j < colsCount; j++) 
    { 
    TextBox quantity = (TextBox)table.Rows[i +1].Cells[j].FindControl("TextBoxRow_" + i + "Col_" + j); 

    quantity .Attributes.Add("onchange", "jsFunc('TextBoxRow_'" + i + "Col_" + j + "')"); 
    } 

} 
+0

Где находится текстовое поле для обмена? где назначить идентификаторы текстовых полей? – Ashwini

+0

Добавлен в код. ваш javascript должен определить функцию, которую вы используете в TextBoxAttribute. –

+0

. Я обновил свой код выше plz и отвечу на это соответствующее решение. – Ashwini

Смежные вопросы