2017-11-25 42 views
0

我有一個驗證器控件,當我向其中添加java腳本函數時它不起作用,並且我嘗試更改它的按鈕文本不起作用。代碼是婁javaScript函數不能在我的ASP.Net控件上工作

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 

    <script type="text/javascript"> 

     function clientValidate(source, args) 
     { 
      if (parseInt(args.Value) < 10) 
      { 
       return source.IsValid = false; 

      } 
      else 
      { 
       return source.IsValid = true; 
      } 
     } 

     function Alert(ctr) 
     { 
      alert("Hello"); 
      ctr.Text = "clicked"; 
     } 

    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Value Must not be Below 10" ClientValidationFunction="clientValidate" OnServerValidate="CustomValidator1_ServerValidate" ControlToValidate="txt" Display="Dynamic" ForeColor="#FF5050"></asp:CustomValidator> 
      &nbsp;&nbsp; 
      <asp:TextBox ID="txt" runat="server" AutoPostBack="true" ></asp:TextBox> 
      &nbsp; 
      <asp:Button ID="btn1" runat="server" Text="Button" OnClientClick="Alert(btn1)" /> 

     </div> 
    </form> 
</body> 
</html> 

一說的是,警報腳本工作,但按鈕上的文字並沒有得到改變的事情。

另一件事是驗證器的服務器端事件是在單獨的cs文件中。

感謝您的幫助。

回答

0

您在客戶端驗證功能中使用參數不正確。正確的用法就是這樣。

function clientValidate(source, args) 
{ 
//sender is <span...>err</span> extended properties include controltovalidate 
//args is {Value: 123, IsValid: true} 
    if (parseInt(args.Value) < 10) 
    { 
     args.IsValid = false; //not source and no return 
     //other logic 

    } 
    else 
    { 
     //args.IsValid = true; //redundant. **true** is default value 
     //return source.IsValid = true; //see above 
     //other logic 
    } 
} 

至於Alert函數。該功能是正確的,可能工作。通話不正確。像這樣調用函數。

<asp:Button ID="btn1" runat="server" Text="Button" OnClientClick="Alert(this)" /> 

注意this參數在調用中。

更新評論/額外的問題

定製Alert功能可能需要更多的參數。像這樣的東西。

function Alert(ctr, msg, evt) { 
 
    if (evt) 
 
    evt.preventDefault(); 
 
    switch (ctr.tagName.toLowerCase()) { 
 
    case 'input': 
 
    case 'textarea': 
 
     ctr.value = msg; 
 
     break; 
 
    case 'div': 
 
     ctr.innerHTML = msg; 
 
     break; 
 
    default: 
 
     alert(msg); 
 
     break 
 
    } 
 
    return false; 
 
}
<input type="button" value="Click Me" onclick="return Alert(this,'clicked',event);" /><br /> 
 
<div onclick="Alert(this,'div is clicked')">Click div</div>

+0

謝謝兄弟,第一個工作正常。但在第二部分。我想要靈活的例如發送一個在頁面中的其他對象(例如,在原始帖子中看到的具有txt ID的asp:textbox控件)以提醒並獲取它的值,然後將它添加到allert消息中,這可能嗎? ==> 函數警報(ctr) { alert(「Hello」+ ctr.Text); } 或者這樣做==> 功能警報(ctr) { alert(「Hello」); ctr.Text =「clicked」; } 可以做? – Heydar

+0

據我所知,我不能發送asp:控制到javascript方法。所以它必須是HTML控制。是嗎? – Heydar

+0

不完全。 'asp:controls'呈現爲HTML元素。小心一點。 –

0

客戶端不知道文本和它的唯一可訪問的服務器上。 您應該使用客戶端屬性來代替。

使用這樣的:使用的JS功能

function Alert(ctr) 
    { 
     alert("Hello"); 
     document.getElementById(ctr).value= "clicked"; 
    } 

<input type="button" id="btn1" value="Button" onClick="Alert('btn1')"/> 

防止服務器上做回發。

+0

以及1:謝謝你的答覆。 第二:我想對ASP.Net控件執行javascript效果。 第三個是我的主要問題(驗證器)仍然存在。 – Heydar

相關問題