javaScript函数不能在我的ASP.Net控件上工作

问题描述:

我有一个验证器控件,当我向其中添加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文件中。

感谢您的帮助。

您在客户端验证功能中使用参数不正确。正确的用法就是这样。

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元素。小心一点。 –

客户端不知道文本和它的唯一可访问的服务器上。 您应该使用客户端属性来代替。

使用这样的:使用的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