jQuery document (দস্তাবেজ)। প্রস্তুত এবং আপডেটপ্যানেলস?


475

আমি একটি আপডেটপ্যানেলের অভ্যন্তরে থাকা উপাদানগুলির উপর কিছু মাউসওভার প্রভাবগুলি ওয়্যার আপ করতে jQuery ব্যবহার করছি। ঘটনা আবদ্ধ $(document).ready। উদাহরণ স্বরূপ:

$(function() {    
    $('div._Foo').bind("mouseover", function(e) {
        // Do something exciting
    });    
});

অবশ্যই, পৃষ্ঠাটি লোড হওয়ার পরে এটি প্রথমবারে সূক্ষ্মভাবে কাজ করে, তবে আপডেটপ্যানেল যখন আংশিক পৃষ্ঠাগুলি আপডেট করে, এটি চালানো হয় না এবং মাউসওভারের প্রভাবগুলি আপডেটপ্যানেলের অভ্যন্তরে আর কাজ করে না।

কেবল প্রথম পৃষ্ঠার লোডের উপরেই নয়, jQuery এ ওয়্যারিং স্টাফগুলি আপ করার জন্য প্রস্তাবিত পদ্ধতিটি কী, তবে প্রতিবার আপডেটপ্যানেল কোনও আংশিক পৃষ্ঠা আপডেট জ্বালিয়ে দেয়? আমি কি পরিবর্তে এএসপি.নেট এজ্যাক্স লাইফসাইকেলটি ব্যবহার করব $(document).ready?


এটি ব্যবহার করে দেখুন আমি মনে করি এটি আপনার সমস্যার সমাধান করবে কোডপ্রজেক্ট
আর্টিকেল /

উত্তর:


545

একটি আপডেটপ্যানেল কোনও আপডেটে আপডেট প্যানেলের সামগ্রীগুলি সম্পূর্ণরূপে প্রতিস্থাপন করে। এর অর্থ হ'ল যে ইভেন্টগুলি আপনি সাবস্ক্রাইব করেছেন সেগুলি আর সাবস্ক্রাইব হবে না কারণ আপডেট প্যানেলে নতুন উপাদান রয়েছে।

আমি এর চারপাশে কাজ করার জন্য যা করেছি তা হ'ল প্রতিটি আপডেটের পরে আমার প্রয়োজনীয় ইভেন্টগুলি পুনরায় সাবস্ক্রাইব করা। আমি $(document).ready()প্রাথমিক লোডের জন্য ব্যবহার করি , তারপরে PageRequestManagerপ্রতিটি আপডেট পুনরায় সাবস্ক্রাইব করতে মাইক্রোসফ্ট (যদি আপনার পৃষ্ঠায় আপডেট প্যানেল থাকে তবে উপলব্ধ) ব্যবহার করি।

$(document).ready(function() {
    // bind your jQuery events here initially
});

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function() {
    // re-bind your jQuery events here
});

PageRequestManagerএকটি জাভাস্ক্রিপ্ট অবজেক্ট যা স্বয়ংক্রিয়ভাবে উপলব্ধ হলে একটি আপডেট প্যানেল পৃষ্ঠাতে হয়। আপডেটপ্যানেল পৃষ্ঠাটিতে যতক্ষণ না থাকে ততক্ষণ এটিকে ব্যবহার করার জন্য আপনার উপরের কোড ব্যতীত অন্য কিছু করার দরকার নেই।

আপনার যদি আরও বিশদ নিয়ন্ত্রণের প্রয়োজন হয় তবে এই ইভেন্টটি .NET ইভেন্টগুলি কীভাবে আর্গুমেন্টগুলি পাস হয় তার অনুরূপ আর্গুমেন্টগুলি পাস করে (sender, eventArgs)যাতে আপনি কী ঘটনাকে উত্থাপিত করেছেন তা দেখতে এবং প্রয়োজনে কেবল পুনরায় আবদ্ধ করতে পারেন।

মাইক্রোসফ্ট থেকে নথিপত্রের সর্বশেষ সংস্করণটি এখানে রয়েছে: msdn.microsoft.com/.../bb383810.aspx


আপনার প্রয়োজনের উপর নির্ভর করে আপনার কাছে থাকতে পারে আরও ভাল বিকল্প হ'ল jQuery এর ব্যবহার .on()। এই আপডেটটি প্রতিটি আপডেটে DOM উপাদানগুলিতে পুনরায় সাবস্ক্রাইব করার চেয়ে আরও দক্ষ। আপনি এই পদ্ধতির ব্যবহারের আগে সমস্ত ডকুমেন্টেশন পড়ুন, কারণ এটি আপনার প্রয়োজনগুলি মেটাতে পারে বা নাও পারে। অনেকগুলি jQuery প্লাগইন রয়েছে যা ব্যবহারের জন্য রিফ্যাক্টরটি অযৌক্তিক হতে পারে .delegate()বা .on()তাই, সেই ক্ষেত্রে আপনি পুনরায় সাবস্ক্রাইব করা থেকে ভাল।


1
আপনি ব্যাখ্যা দেওয়ার সময় দয়া করে আরও সুনির্দিষ্ট হন। আমি বোঝাতে চাইছি ব্যবহারের একটি উদাহরণ কোডের কয়েকটি বিক্ষিপ্ত লাইনের চেয়ে অনেক ভাল। ব্রায়ান ম্যাকের ব্যাখ্যা দেখুন। এইটা ঠিক আছে!
সত্যসন্ধানী

3
@ ড্যান, jQuery 1.7 হিসাবে,.delegate().on()
গ্যাব্রিয়েল পেট্রিওলি

@ গ্যাবাইকাজি.পেট্রোলি আমি বুঝতে পারি যে এটি অতিক্রম করা হয়েছে, তবে যেহেতু এই উত্তরটি একটি সাধারণ সমস্যা সমাধান করেছে বলে মনে হয়েছে আমি jQuery এর পুরানো সংস্করণগুলির সাথে সামঞ্জস্যতা সর্বাধিকতর করতে চেয়েছিলাম যা এখনও আপগ্রেড করা হয়নি। আমার উত্তর পূর্বে প্রস্তাবিত .live(...)যা আনুষ্ঠানিকভাবে 1.7 এ অবহেলা করা হয়েছে এবং ভবিষ্যতের সংস্করণে এটি সরানো হতে পারে। আমি ইচ্ছাকৃতভাবে বেছে নিয়েছি .delegate()যেহেতু এটি কিছু সময়ের জন্য jQuery এ সমর্থিত হয়েছে এবং খুব শীঘ্রই কোনও সময় অপসারণের সম্ভাবনা নেই। তবে, আমি .on()যারা উত্তর ব্যবহার করতে পারি তাদের জন্যও আমার উত্তরটি আপগ্রেড করব ।
ড্যান হারবার্ট

12
Declare (ডকুমেন্ট) এর অভ্যন্তরে প্রাইম ভার ঘোষণা করা এবং তারযুক্ত করা ভাল ready
drake7707

1
@ আহমেদসামি এটি আর ব্যবহার করার প্রস্তাব দেওয়া হয় না jQuery.delegate()। এটি দ্বারা অগ্রাহ্য করা হয়েছে jQuery.on()যা ব্যবহারের জন্য পছন্দসই এপিআই। delegate()এর নির্দিষ্ট ব্যবহারের জন্য কেবল একটি মোড়ক on()এবং এটি সম্ভবত ভবিষ্যতে অবহেলিত হতে পারে। আমার পূর্ববর্তী মন্তব্য উল্লেখটি delegate()এক বছর আগে লিখিত হয়েছিল যখন jQuery 1.7 (যা on()এপিআই প্রবর্তন করেছিল ) সদ্য প্রকাশ হয়েছিল। ইতিমধ্যে jQuery 1.9 এর বাইরে এবং 2.0 বিটা মুক্তির জন্য প্রস্তুত রয়েছে, delegate()কোনও নতুন কোড ব্যবহার না করা ভাল ধারণা ।
ড্যান হারবার্ট

159
<script type="text/javascript">

        function BindEvents() {
            $(document).ready(function() {
                $(".tr-base").mouseover(function() {
                    $(this).toggleClass("trHover");
                }).mouseout(function() {
                    $(this).removeClass("trHover");
                });
         }
</script>

যে অঞ্চলটি আপডেট হতে চলেছে।

<asp:UpdatePanel...
<ContentTemplate
     <script type="text/javascript">
                    Sys.Application.add_load(BindEvents);
     </script>
 *// Staff*
</ContentTemplate>
    </asp:UpdatePanel>

এসপির পক্ষে ভাল কাজ করে: গ্রিডভিউ টেক্সটবক্সের ভিতরে <এডিটেমিটেম্পলেট>
ড্যান র্যান্ডলফ

এই সমাধানটির সমস্যাটি হ'ল এটি যখন কাজ করে এটি আপডেটপ্যানেলের অ্যাসিনক্রোনাস পোস্টটিকে আবার মেরে ফেলে - আপডেটপ্যানেলটিকে আবারও অকেজো করে তোলে। (দীর্ঘশ্বাস)
MC9000

63

একটি আপডেটপ্যানেলের অভ্যন্তরে jQuery সহ ব্যবহারকারী নিয়ন্ত্রণ

এটি প্রশ্নের সরাসরি উত্তর নয়, তবে আমি এখানে যে উত্তরগুলি পেয়েছি তা পড়ে আমি এই সমাধানটি একসাথে রেখেছি এবং আমি ভেবেছিলাম যে কেউ এটির দরকারী হতে পারে।

আমি ব্যবহারকারীর নিয়ন্ত্রণের ভিতরে jQuery টেক্সটরিয়া সীমাবদ্ধ ব্যবহার করার চেষ্টা করছিলাম। এটি মুশকিল, কারণ ইউজার কন্ট্রোল একটি আপডেটপ্যানেলের অভ্যন্তরে চলে এবং এটি কলব্যাকের সাথে তার বাইন্ডিংগুলি হারাতে থাকে।

এটি যদি কেবল একটি পৃষ্ঠা হত তবে এখানে উত্তরগুলি সরাসরি প্রয়োগ করা যেত। তবে ব্যবহারকারীর নিয়ন্ত্রণগুলিতে মাথার ট্যাগটিতে সরাসরি অ্যাক্সেস নেই এবং উত্তরগুলির কিছু অনুমান হিসাবে তাদের আপডেটপ্যানেলে সরাসরি অ্যাক্সেস নেই।

আমি এই স্ক্রিপ্ট ব্লকটি সরাসরি আমার ব্যবহারকারী নিয়ন্ত্রণের মার্কআপের শীর্ষে রেখেছি। প্রাথমিক বাইন্ডের জন্য, এটি $ (নথি)। প্রস্তুত ব্যবহার করে এবং তারপরে সেখান থেকে prm.add_endRequest ব্যবহার করে:

<script type="text/javascript">
    function BindControlEvents() {
        //jQuery is wrapped in BindEvents function so it can be re-bound after each callback.
        //Your code would replace the following line:
            $('#<%= TextProtocolDrugInstructions.ClientID %>').limit('100', '#charsLeft_Instructions');            
    }

    //Initial bind
    $(document).ready(function () {
        BindControlEvents();
    });

    //Re-bind for callbacks
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 

    prm.add_endRequest(function() { 
        BindControlEvents();
    }); 

</script>

সুতরাং ... কেবল ভেবেছিল কেউ এটি জানতে পারে যে এটি কাজ করে।


2
আমার জীবনের জন্য এটি কাজ করতে পারি না। তারপরে আমি এটিকে মাথা থেকে পাদলেখের দিকে সরালাম এবং এটি কার্যকর। ইতিবাচক নয়, তবে আমি মনে করি এটি ব্যবহার করা স্ক্রিপ্ট ম্যানেজারের পরে আসার দরকার ছিল।
অ্যাডাম ইয়ংগার্স

আমার ক্ষেত্রে আমি স্ক্রিপ্টমনেজ.আরজিস্টারক্লায়েন্টসক্রিপ ব্লক ব্যবহার করে স্ক্রিপ্টটি যুক্ত করছিলাম যা সিস সংজ্ঞায়নের আগে স্ক্রিপ্ট যুক্ত করে, তাই আমি পরিবর্তে রেজিস্টারস্টার্টআপস্ক্রিপ্ট ব্যবহার করে শেষ করেছি ( এখানে পার্থক্য দেখুন )
ফিরাস আসাদ

2
শীতল উত্তর! এটি আমার এসপ নেট ওয়েব অ্যাপ্লিকেশনটিতে একটি কবিতার মতো কাজ করেছে। আপনার জন্য +
প্রণেশ জনার্থনন 26'17

33

JQuery 1.3 এ আপগ্রেড করুন এবং ব্যবহার করুন:

$(function() {

    $('div._Foo').live("mouseover", function(e) {
        // Do something exciting
    });

});

দ্রষ্টব্য: লাইভ বেশিরভাগ ইভেন্টের সাথে কাজ করে তবে সমস্তটি নয়। ডকুমেন্টেশনে একটি সম্পূর্ণ তালিকা রয়েছে ।


লাইভ সংশোধন করে প্যানেলগুলি আপডেট করে। কোন হুপের মধ্য দিয়ে ঝাঁপিয়ে পড়ার দরকার নেই।
টিম স্কারবরো

পেজলোডে এমন কিছু ঘটতে হবে যা সম্পর্কে? উদাহরণস্বরূপ জেব্রা স্ট্রিপিং টেবিল? '(' টেবিল টিআর: নবম-শিশু (বিজোড়) ') add
অ্যাডাম ইয়ংগার্স

3
কেবল আপডেট করার জন্য, jQuery 1.7 থেকে এখন পরিবর্তে .on () ব্যবহার করার পরামর্শ দেওয়া হয়েছে
জর্জ

1
live()আইই 7 (jQuery 1.5.1 / VS2010 প্রকল্প) এ পদ্ধতিটি ব্যবহার করার সময় একটি গুরুতর ব্যর্থতা খুঁজে পেয়েছে । যখন ব্যবহার live()একটি UpdatePanel ভিতরে v3.5 ASP.NET একটি নিয়মিত AutoPostbackএর <asp:DropDownList />কারণ 2 আংশিক postbacks যেমন প্রত্যাশিত 1. ব্রাউজার দ্বারা জারি অতিরিক্ত postback বিষয়বস্তু (বাতিল) অভাব আছে উল্টোদিকে ঘটাচ্ছে Page.IsPostBackহতে falseযা আমার আবদ্ধ ভিতরে রাষ্ট্র নিহত ( নিয়ন্ত্রণগুলি)। আমি অপরাধীকে লাইভ () পদ্ধতিতে পেয়েছি। আমি অনুধাবন করেছি যে 1 ম পোস্টব্যাক আপডেট অনুসারে আপডেটপ্যানেল দ্বারা বাতিল করা হবে তবে কেবল তার কাতারে নেই যেখানে আছে there
timmi4sa

20

আপনি চেষ্টা করতে পারেন:

<asp:UpdatePanel runat="server" ID="myUpdatePanel">
    <ContentTemplate>

        <script type="text/javascript" language="javascript">
        function pageLoad() {
           $('div._Foo').bind("mouseover", function(e) {
               // Do something exciting
           });
        }
        </script>

    </ContentTemplate>
</asp:UpdatePanel>

, যেহেতু পেজল্ড () হ'ল একটি এএসপি.নেট এজ্যাক্স ইভেন্ট যা প্রতিবারই ক্লায়েন্টের পাশে পৃষ্ঠাটি লোড হওয়ার পরে কার্যকর করা হয়।


পেজলড আপডেট প্যানেলের প্রতিটি এএসআইএনসি পোস্টব্যাকের ইভেন্টগুলিকে সদৃশ করুন।
জো

17

আমার উত্তর?

function pageLoad() {

  $(document).ready(function(){

প্রভৃতি

মনোমুগ্ধকর মতো কাজ করেছেন, যেখানে বেশ কয়েকটি অন্যান্য সমাধান ব্যর্থ হয়ে ব্যর্থ হয়েছে।


পাঠ্যের পরিমাণ অনুসারে আমার ইউজারকন্ট্রোলটিতে আমার আপডেটপ্যানেলে আমার লিস্টভিউতে টেক্সারিয়াদের আকার পরিবর্তন করার জন্য উপযুক্ত।
রিসোর্স

আমি আপডেট প্যানেলগুলির সাথে ডম জ্যাকুই ফাংশনগুলি পোস্টব্যাকে সঠিকভাবে কাজ করার জন্য সংগ্রাম করেছিলাম, এই সমাধানটি কাজ করেছে এবং আমার 2 টি পরিস্থিতিতে আমার ফাংশন কলগুলি নকল করতে হবে না। এটি jquery ফাংশন এবং শ্রোতাদের উপলব্ধ রাখে। দ্রষ্টব্য আমি আমার সমস্ত স্ক্রিপ্ট এবং jquery লাইব্রেরিতে পৃষ্ঠার নীচে ফোরাম [শেষ] ট্যাগের ঠিক আগে অন্তর্ভুক্ত করেছি। ধন্যবাদ !!!
moto_geek

7

আমি নিম্নলিখিত পদ্ধতির একটি ব্যবহার করব:

  1. কোনও ক্রিয়াকলাপে ইভেন্টের বাইন্ডিংকে আবদ্ধ করুন এবং প্রতিবার পৃষ্ঠাটি আপডেট করার পরে এটি চালান। আপনি সর্বদা ইভেন্টগুলিকে নির্দিষ্ট উপাদানের সাথে আবদ্ধ করতে পারেন যাতে ইভেন্টগুলিকে একই উপাদানগুলিতে একাধিকবার আবদ্ধ না করা হয়।

  2. লাইভাকুরি প্লাগ-ইন ব্যবহার করুন , যা মূলত আপনার জন্য স্বয়ংক্রিয়ভাবে যাদুবিদ্যার জন্য একটি পদ্ধতি সম্পাদন করে। ইভেন্ট বন্ডিংয়ের উপর আপনি যে পরিমাণ নিয়ন্ত্রণ রাখতে চান তার উপর নির্ভর করে আপনার পছন্দটি ভিন্ন হতে পারে।


7

এটি আমার পক্ষে কাজ করেছে:

$(document).ready(function() {

    // Do something exciting

    var prm = Sys.WebForms.PageRequestManager.getInstance();

    prm.add_endRequest(function() {
        // re-bind your jQuery events here
    });

});

6

ফাংশন পৃষ্ঠা লোড () এই পরিস্থিতিতে ব্যবহার করা খুব বিপজ্জনক। আপনি ইভেন্টগুলি একাধিকবার তারযুক্ত হয়ে উঠতে পারেন। আমি .live () থেকেও দূরে থাকব কারণ এটি নথির উপাদানটির সাথে সংযুক্ত থাকে এবং পুরো পৃষ্ঠাটি (ধীর এবং কৃপণ) অতিক্রম করতে হয়।

আমি এখনও অবধি সবচেয়ে ভাল সমাধানটি হ'ল আপডেট প্যানেলের বাইরে একটি মোড়কের উপরে jQuery .delegate () ফাংশন ব্যবহার করা এবং বুদবুদ ব্যবহার করা। অন্যথায়, আপনি সর্বদা মাইক্রোসফ্টের অ্যাজাক্স লাইব্রেরি ব্যবহার করে হ্যান্ডলারের ওয়্যার আপ করতে পারেন যা আপডেটপ্যানেলগুলির সাথে কাজ করার জন্য ডিজাইন করা হয়েছিল।


6

$(document).ready(function (){...})পৃষ্ঠার পোস্টের পরে যখন কাজ না করা থাকে তবে নীচে Asp.page এ জাভাস্ক্রিপ্ট ফাংশন পৃষ্ঠাটি লোড করুন:

<script type="text/javascript" language="javascript">
function pageLoad() {
// Initialization code here, meant to run once. 
}
</script>

: হ্যাঁ, isPartialLoad জন্য চেক পাশাপাশি stackoverflow.com/questions/301473/...
স্টিভ গ্রীন

4

আমার একইরকম সমস্যা ছিল এবং এটি সবচেয়ে ভালভাবে কাজ করার উপায়টি হ'ল এটি হ্যান্ডল করার জন্য ইভেন্ট বুবলিং এবং ইভেন্ট প্রতিনিধিটির উপর নির্ভর করা। ইভেন্টের প্রতিনিধিদের সম্পর্কে দুর্দান্ত জিনিসটি হ'ল একবার সেটআপ হয়ে গেলে, আপনাকে এজেএক্স আপডেটের পরে ইভেন্টগুলি পুনরায় ফিরিয়ে আনতে হবে না।

আমি আমার কোডটিতে যা করি তা হ'ল আপডেট প্যানেলের মূল উপাদানটির জন্য একটি প্রতিনিধি সেটআপ করা। এই মূল উপাদানটি কোনও আপডেটে প্রতিস্থাপন করা হয় না এবং তাই ইভেন্টের বাইন্ডিংটি প্রভাবিত হয় না।

JQuery এ ইভেন্টের প্রতিনিধিদের পরিচালনা করার জন্য বেশ কয়েকটি ভাল নিবন্ধ এবং প্লাগইন রয়েছে এবং বৈশিষ্ট্যটি সম্ভবত 1.3 প্রকাশে বেক করা হবে। আমি নিবন্ধ / প্লাগইনটি রেফারেন্সের জন্য ব্যবহার করি:

http://www.danwebb.net/2008/2/8/event-delegation-made-easy-in-jquery

এটি কী ঘটছে তা আপনি বুঝতে পারলে, আমি মনে করি আপনি এটি একটি আরও মার্জিত সমাধান খুঁজে পাবেন যা প্রতিটি আপডেটের পরে ইভেন্টগুলি পুনরায় বাঁধার জন্য মনে রাখার চেয়ে বেশি নির্ভরযোগ্য। পৃষ্ঠাটি আনলোড হওয়ার পরে আপনাকে আনবাইন্ড করতে একটি ইভেন্ট দেওয়ার অতিরিক্ত সুবিধাও রয়েছে।


4

এফডব্লিউআইডাব্লু, আমি ডাব্লু / মটুলগুলি একই ধরণের সমস্যার অভিজ্ঞতা পেয়েছি। আমার ইভেন্টগুলি পুনরায় সংযুক্ত করা সঠিক পদক্ষেপ ছিল, তবে অনুরোধ..ইজি শেষে করা দরকার

var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function() {... 

সূচনা-অনুসন্ধানের কারণে জেএস ব্যতিক্রমগুলি শুরুর জন্য আরম্ভ করা হলে কেবল কিছু মনে রাখতে হবে।

চিয়ার্স



3
pageLoad = function () {
    $('#div').unbind();
    //jquery here
}

পেজলড ফাংশনটি এই ক্ষেত্রে উপযুক্ত কারণ এটি প্রাথমিক পৃষ্ঠা লোড এবং প্রতিটি আপডেটপ্যানেল অ্যাসিঙ্ক পোস্টব্যাকে চলে। আপডেটপ্যানেল পোস্টব্যাকগুলিতে জ্যাকোয়ারি কাজ করতে আমাকে আনবাইন্ড পদ্ধতিটি যুক্ত করতে হয়েছিল।

http://encosia.com/document-ready-and-pageload-are-not-the-same/


2

আমার উত্তর উপরের সমস্ত বিশেষজ্ঞের মন্তব্যের উপর ভিত্তি করে, তবে নীচে নীচের কোডটি যে কেউ প্রতিটি পোস্টব্যাক এবং প্রতিটি অ্যাসিনক্রোনাস পোস্টব্যাকের উপরে জাভাস্ক্রিপ্ট কোডটি কার্যকর করা হবে তা নিশ্চিত করতে ব্যবহার করতে পারেন।

আমার ক্ষেত্রে, একটি পৃষ্ঠার মধ্যে আমার ব্যবহারকারীর নিয়ন্ত্রণ ছিল। আপনার ব্যবহারকারী নিয়ন্ত্রণে নীচের কোডটি কেবল পেস্ট করুন।

<script type="text/javascript"> 
        var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_endRequest(EndRequestHandler);
    function EndRequestHandler(sender, args) {
        if (args.get_error() == undefined) {
            UPDATEPANELFUNCTION();
        }                   
    }

    function UPDATEPANELFUNCTION() {
        jQuery(document).ready(function ($) {
            /* Insert all your jQuery events and function calls */
        });
    }

    UPDATEPANELFUNCTION(); 

</script>

2

আপডেট প্যানেল সর্বদা আপনার বোঝার পরে আপনার জিক্যুরিটিকে তার ইনবিল্ট স্ক্রিপ্টম্যানের স্ক্রিপ্টগুলির সাথে প্রতিস্থাপন করে। আপনি যদি পৃষ্ঠা রিকোয়েস্টম্যানেজারের উদাহরণ পদ্ধতিগুলি ব্যবহার করেন তবে এটি আরও ভাল ...

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(onEndRequest)
    function onEndRequest(sender, args) {
       // your jquery code here
      });

এটা ঠিক কাজ করবে ...


একটি পুরানো পোস্ট, তবে একটি যা আমাকে সাহায্য করেছিল। একটি জিনিস যা আমি এটিতে যুক্ত করতে চাই: অ্যাড_েন্ডারেক্সেস্ট কোডের অবস্থান আপডেটপ্যানেলের অভ্যন্তরে থাকতে হবে, যেহেতু সিস.ইউব ফোরামস.পেজআরকোয়েস্টম্যানেজারটি কেবলমাত্র সেই সময়ে উপলব্ধ। যাইহোক, আসল ফাংশনটি সেই স্থানে থাকার দরকার নেই। সুতরাং, আমার ক্ষেত্রে, আমার কাছে একটি স্ক্রিপ্ট.জেএস ফাইল রয়েছে যা আমার কাছে আবদ্ধ হতে চাই কোডটি ধারণ করে, একটি ফাংশনের মধ্যে। সেই স্ক্রিপ্ট.জেএস ফাইলটিতে আমার একটি ডকুমেন্ট.ডিআর কল রয়েছে, যা উপরের ফাংশনটিকে আমন্ত্রণ জানায়। তারপরে, আমার আপডেটপ্যানেলে, আমার কাছে add_endRequest কোড রয়েছে, যা উপরের ফাংশনটিকেও অনুরোধ করে।
কিরণ রামস্বামী

1

স্ক্রিপ্টের নীচে ব্যবহার করুন এবং সেই অনুযায়ী স্ক্রিপ্টের বডিটি পরিবর্তন করুন।

       <script>
        //Re-Create for on page postbacks
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_endRequest(function () {
           //your codes here!
        });
    </script>

0

ব্রায়ান ম্যাকের উত্তরের প্রতিক্রিয়া:

আমি জাভাস্ক্রিপ্টটিকে সরাসরি ইউজারকন্ট্রোলের এইচটিএমএলে না রেখে স্ক্রিপ্টম্যানেজারের মাধ্যমে আমার পৃষ্ঠায় ইনজেক্ট করি। আমার ক্ষেত্রে আমার আপডেট ফ্যানেলটি শেষ হয়ে ফিরে আসার পরে দৃশ্যমান হওয়া ফর্মটিতে আমার স্ক্রোল করা দরকার। এটি ফাইলের পিছনে কোডে যায়। আমার নমুনায়, আমি ইতিমধ্যে মূল বিষয়বস্তু পৃষ্ঠায় prm পরিবর্তনশীল তৈরি করেছি created

private void ShowForm(bool pShowForm) {
    //other code here...
    if (pShowForm) {
        FocusOnControl(GetFocusOnFormScript(yourControl.ClientID), yourControl.ClientID);
    }
}

private void FocusOnControl(string pScript, string pControlId) {
    ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "focusControl_" + pControlId, pScript, true);
}

/// <summary>
/// Scrolls to the form that is made visible
/// </summary>
/// <param name="pControlId">The ClientID of the control to focus on after the form is made visible</param>
/// <returns></returns>
private string GetFocusOnFormScript(string pControlId) {
    string script = @"
    function FocusOnForm() {
        var scrollToForm = $('#" + pControlId + @"').offset().top;
        $('html, body').animate({ 
            scrollTop: scrollToForm}, 
            'slow'
        );
        /* This removes the event from the PageRequestManager immediately after the desired functionality is completed so that multiple events are not added */
        prm.remove_endRequest(ScrollFocusToFormCaller);
    }
    prm.add_endRequest(ScrollFocusToFormCaller);
    function ScrollFocusToFormCaller(sender, args) {
        if (args.get_error() == undefined) {
            FocusOnForm();
        }
    }";
    return script;
}

0
Sys.Application.add_load(LoadHandler); //This load handler solved update panel did not bind control after partial postback
function LoadHandler() {
        $(document).ready(function () {
        //rebind any events here for controls under update panel
        });
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.