簡體   English   中英

當客戶端 onblur 事件被觸發並返回 false 時,如何取消文本框的服務器端 OnTextChanged 事件?

[英]How to cancel server-side OnTextChanged event of textbox when client-side onblur event gets fired and returns false?

我有一個帶有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 ie ('') 並將光標移到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。

編輯:在您的 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 的值。

編輯:請注意,當使用 document.getElementById 檢索對元素的引用時,您需要將客戶端 ID 作為參數傳遞。 例如,如果 txtNumber 對象位於名為 FormView1 的 FormView 中,則生成的客戶端 ID 將為 FormView1_txtNumber。 對您的代碼進行以下修改之一應該可以解決此問題:

1) 如果你的 javascript 在 aspx 頁面的腳本標簽中,只需將document.getElementById('txtNumber')修改為document.getElementById('<%= txtNumber.ClientID %>')

2) 如果您使用的是外部 js 文件,請在調用 js 文件之前將document.getElementById('txtNumber')更改為document.getElementById(txtNumberClientID)並在您的 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>

試試這個代碼,希望它對你有用......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM