当客户端onblur事件被触发并返回false时,如何取消textbox的服务器端OnTextChanged事件



我有一个网页,上面有一个textbox,如下所示-

<asp:TextBox ID="txtNumber" runat="server" size="5" MaxLength="9" 
AutoPostBack="True" OnTextChanged="txtNumber_TextChanged" 
CssClass="txtBoxPage" Style="margin-left: 3px;" 
Visible="false" onblur="return [some JS function] false;">
</asp:TextBox>

我想要这样一个功能,即如果用户在textbox中输入Nothing,即(''),并将光标移动到textbox之外,则Postback不应触发。目前,即使在onblur事件返回false之后,它也会被触发。

如果文本框值为空,则可以按如下方式抑制TextChanged事件-

  • 删除onblur函数,改为使用onchange
  • 在Page_Load-中添加以下行

    protected void Page_Load(object sender, EventArgs e)
    {
    txtNumber.Attributes.Add("onchange", "if(checkEmptyValue(this)) {return false; }");
    }
    
  • 在标记中包含以下JavaScript-

    String.prototype.trim = function() {     return this.replace(/^s+|s+$/g, ""); }; 
    function checkEmptyValue(o) {
    if (o.value == '' || o.value.trim() == '')
    return true;
    else
    return false;
    }
    

试试上面的代码,让我知道它是否有效。

document.getElementById('txtnumber').onchange=function(){
if(this.value!=""){
_doPostBack('txtNumber',this.value);
}
}

然后,您可以使用Request["__EVENTARGUMENT"]条目检索该值。此外,请确保关闭AutoPostback。

EDIT:在您的txtNumber_TextChanged处理程序中,例如:

private void txtNumber_TextChanged handler
{
Response.Write(Request["__EVENTARGUMENT"]);
//Writes the value of the TextBox. Basically, EVENTARGUMENT is the second argument passed when calling _doPostBack
}

请注意,这完全是可选的,因为您仍然可以使用txtNumber对象访问txtNumber的值(与传统方法一样)。

EDIT:请注意,当使用document.getElementById检索对元素的引用时,需要将客户端ID作为参数传递。例如,如果txtNumber对象位于名为FormView1的FormView中,则生成的客户端ID将为FormView1_txtNumber。以下对代码的修改之一应该可以解决这个问题:

1) 如果您的javascript位于aspx页面上的脚本标记中,只需将document.getElementById('txtNumber')修改为document.getElementById('<%= txtNumber.ClientID %>')

2) 如果您使用的是外部js文件,请将document.getElementById('txtNumber')更改为document.getElementById(txtNumberClientID),并在调用js文件之前在aspx页面中插入以下脚本标记:

<script type="text/javascript">
window.txtNumberClientID='<%= txtNumber.ClientID %>';
</script>

让我知道这是否有效

您可以在jquery 中使用以下代码

<script>
$('[id$=TextBox1]').live('blur', function (e) {
if ($('[id$=TextBox1]').val() == '') {
alert('empty');
e.preventDefault();
return false;
} else {
alert('fillled');
}
});
</script>

试试这个代码,希望它能为你工作。。。

最新更新