2009-11-18 15 views
22

मेरे पास एक टेक्स्टबॉक्स है जो ऑनटेक्स्ट चेंज किए गए ईवेंट में ड्रॉपडाउन की सामग्री को बदलता है। जब टेक्स्टबॉक्स फोकस खो देता है तो यह घटना आग लगती है। मैं इसे कुंजीपटल या कीप घटना पर कैसे कर सकता हूं?मैं KeyUp पर टेक्स्टबॉक्स पोस्टबैक कैसे बना सकता हूं?

यहाँ तो codebehind में, मैं पृष्ठ लोड पर लटकती बाँध मेरी कोड

<asp:TextBox ID="Code" runat="server" AutoPostBack="true" OnTextChanged="Code_TextChanged">     

<asp:UpdatePanel ID="Update" runat="server"> 
    <ContentTemplate> 
     <asp:DropDownList runat="server" ID="DateList" />    
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="Code" /> 
    </Triggers> 
</asp:UpdatePanel> 

का एक उदाहरण है। Code_TextChanged ईवेंट बस ड्रॉपडाउन को पुनर्निर्मित करता है। जब मैं टेक्स्टबॉक्स फोकस खो देता हूं, तो मैं प्रत्येक कुंजीपटल पर ऐसा करना चाहता हूं।

मुझे हाल ही में इस कोड को विरासत में मिला है और यह मेरे लिए ऐसा करने का आदर्श तरीका नहीं है, लेकिन समय सीमाएं मुझे वेब सर्विसेज विधि में इसे फिर से लिखने से रोकती हैं।

मैंने टेक्स्टबॉक्स के लिए "परिवर्तन" ईवेंट से मेल खाने के लिए "कीप" ईवेंट को बाध्य करने के लिए jQuery का उपयोग करने का प्रयास किया है, लेकिन यह केवल दबाए गए पहले कुंजी पर काम करता है।

उत्तर

39

यह आपकी समस्या का समाधान होगा। तर्क काइल द्वारा सुझाए गए समाधान के समान है।

इसे देखें।

<head runat="server"> 
<title></title> 
<script type="text/javascript"> 
    function RefreshUpdatePanel() { 
     __doPostBack('<%= Code.ClientID %>', ''); 
    }; 
</script> 

    <asp:TextBox ID="Code" runat="server" onkeyup="RefreshUpdatePanel();" AutoPostBack="true" OnTextChanged="Code_TextChanged"></asp:TextBox> 
    <asp:UpdatePanel ID="Update" runat="server"> 
     <ContentTemplate> 
      <asp:DropDownList runat="server" ID="DateList" /> 
      <asp:TextBox runat="server" ID="CurrentTime" ></asp:TextBox> 
     </ContentTemplate> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="Code" /> 
     </Triggers> 
    </asp:UpdatePanel> 

कोड के पीछे इस तरह से चला जाता है ...

protected void Code_TextChanged(object sender, EventArgs e) 
    { 
     //Adding current time (minutes and seconds) into dropdownlist 
     DateList.Items.Insert(0, new ListItem(DateTime.Now.ToString("mm:ss"))); 

     //Setting current time (minutes and seconds) into textbox 
     CurrentTime.Text = DateTime.Now.ToString("mm:ss"); 
    } 

मैं कार्रवाई में परिवर्तन देखने के लिए अतिरिक्त पाठ बॉक्स को शामिल किया है, पाठ बॉक्स को दूर करते हैं।

+1

इसी के साथ ऐसा ही होता है।जब Updatepanel रीफ्रेश करता है तो टेक्स्टबॉक्स फोकस –

+3

खो देता है बस इस समाधान के साथ AutoPostBack = "true" को हटा दें और इसे काम करना चाहिए। –

+0

रिक की टिप्पणी सही है, ऑटोपोस्टबैक को हटाएं और यह आसानी से काम करेगा –

0

क्या इससे आपकी मदद मिलेगी?

How to make an ASP.NET TextBox fire it's onTextChanged event fire in an AJAX UpdatePanel?

+0

मैंने कोशिश की लेकिन यह केवल दबाए गए पहले कुंजी पर काम करता है। उसके बाद टेक्स्टबॉक्स फोकस खो देता है और प्रत्येक बाद की कीप्रेस घटना को आग नहीं देती है। जैसा कि आप देख सकते हैं, आपके द्वारा अनुशंसित पोस्ट के विपरीत, मेरा टेक्स्टबॉक्स मेरे अपडेट पैनेल के अंदर नहीं है फिर भी यह अभी भी फोकस खो देता है। –

4

जावास्क्रिप्ट, एक अद्यतन पैनल, ग्रिडव्यू, sqldatasource और एक टेक्स्टबॉक्स के साथ ऐसा करने का एक आसान तरीका है। जैसे ही आप टाइप करते हैं, यह तालिका की खोज करता है और परिणाम प्रदर्शित करता है। छोटा और प्यारा, पीछे कोई कोड नहीं।

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="test3.aspx.vb" Inherits="test3" %> 

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
<script type="text/javascript"> 
    function runPostback() { 
     document.forms["form1"].submit(); 
     document.getElementById("TextBox1").focus(); 
    } 
    function getFocus(){ 
     var text = document.getElementById("TextBox1"); 
     if (text != null && text.value.length > 0) { 
      if (text.createTextRange) { 
       var FieldRange = text.createTextRange(); 
       FieldRange.moveStart('character', text.value.length); 
       FieldRange.collapse(); 
      FieldRange.select(); } } 
} 

function SetDelay() { 
    setTimeout("runPostback()", 200); 
} 




</script> 
</head> 
<body onload="getFocus()"> 
<form id="form1" runat="server"> 
<div> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="TextBox1" /> 
     </Triggers> 
     <ContentTemplate> 
      <asp:TextBox ID="TextBox1" onkeyup="SetDelay();" runat="server"></asp:TextBox> 
      <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1"> 
      </asp:GridView> 
      <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:purchasing2ConnectionString %>" 
       SelectCommand="SELECT [name] FROM [vendors] WHERE ([name] LIKE @name + '%')"> 
       <SelectParameters> 
        <asp:ControlParameter ControlID="TextBox1" Name="name" PropertyName="Text" Type="String" /> 
       </SelectParameters> 
      </asp:SqlDataSource> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 
</form> 

0

मैं ट्रिगर के लिए एक जावास्क्रिप्ट चाल एक OnTextChanged घटना का उपयोग करें, मैं एक कलंक फ़ंक्शन को कॉल करें और से इनपुट पाठ फिर से ध्यान केंद्रित करने के लिए (या, अगर आप कई इनपुट पाठ, स्विच ध्यान केंद्रित किया दो इनपुट टेक्स्ट से)

मैंने इसे आईई और फ़ायरफ़ॉक्स में परीक्षण किया है।

जावास्क्रिप्ट कोड:

function reFocus(id) 
    { 
     document.getElementById(id).blur(); 
     document.getElementById(id).focus(); 
    } 

aspx कोड

<asp:TextBox ID="txtProdottoLike" runat="server" 
       ontextchanged="txtProdottoLike_TextChanged" 
       onKeyUp="reFocus(this.id);" 
       AutoPostBack="True"> 
</asp:TextBox> 

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>     
<asp:UpdatePanel ID="Update" runat="server"> 
    <ContentTemplate> 
     <asp:GridView ID="GridProdotto" runat="server" AllowPaging="False" 
       AllowSorting="False" ForeColor="#333333" GridLines="None" 
      OnSelectedIndexChanging="GridProdotto_SelectedIndexChanging" 
      Visible="True" Width="100%" Height="100%" AutoGenerateColumns="False"> 
      <RowStyle BackColor="WhiteSmoke" Font-Size="11px" /> 
      <AlternatingRowStyle BackColor="White" /> 
      <Columns> 
       <asp:BoundField DataField="Prodotto"> 
        <ItemStyle Width="80px" HorizontalAlign="Left" /> 
        <HeaderStyle HorizontalAlign="Left" /> 
       </asp:BoundField> 
       <asp:BoundField DataField="Descrizione"> 
        <ItemStyle HorizontalAlign="Left" /> 
        <HeaderStyle HorizontalAlign="Left" /> 
       </asp:BoundField> 
       <asp:CommandField SelectText="Seleziona" ShowSelectButton="True" ItemStyle-HorizontalAlign="Right"></asp:CommandField> 
      </Columns> 
     </asp:GridView> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="txtProdottoLike" /> 
    </Triggers> 
</asp:UpdatePanel> 

ग # समारोह "GridProdotto_SelectedIndexChanging" डेटाबेस से डेटा पुनर्प्राप्त और ग्रिड का निर्माण।