scriptaculous ajax स्वत: पूर्ण खाली प्रतिक्रिया

वोट
3

मैं ajax-Autocompleter जो अच्छा काम करता है के साथ काम कर रहा हूँ। मेरा उद्देश्य किसी मौजूदा आइटम, या एक नहीं पाया आइटम के लिए एक बनाने समारोह के लिए एक संपादन समारोह के बीच पुनर्निर्देशित करना होता है।

मैं हर ली के लिए एक विशिष्ट आईडी डालें, और इसलिए मैं एक afterUpdateElement विकल्प के साथ संपादन कार्य के लिए उपयोग कर सकते हैं।

लेकिन अगर कोई परिणाम नहीं पाए जाते हैं, सूची खाली है, और मैं किसी भी तरह afterUpdateElement स्क्रिप्ट है कि कोई परिणाम नहीं मिले बताने के लिए नहीं मिल रहा। दरअसल, कोई afterUpdateElement, कहा जाता है के बाद से वहाँ कोई चयन है। तो afterUpdateElement बेकार है ...

मैं ajax अनुरोध द्वारा भेजे पूरा मूल्य परीक्षण के बारे में सोच रहा था। लेकिन मैं यह कैसे आकर्षित करने के लिए नहीं मिला ...

18/03/2009 को 10:20
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
1

तो, मैं अंत में (Gwyohm की भारी मदद से) यदि परिणाम चयन किया गया था या नहीं की जाँच करने के लिए एक रास्ता मिल गया:

  1. सबसे पहले, हम एक छिपी हुई फ़ील्ड जो रिकॉर्ड करेगा अगर एक परिणाम के लिए चुना गया था (सही / गलत) की स्थापना की। डिफ़ॉल्ट रूप से, यह गलत पर सेट है।
  2. afterUpdateElement केवल एक चयन के बाद किया जाता है। तो हम सही पर हमारे छिपा क्षेत्र चालू करने के लिए इस aferUpdateElement का उपयोग करें।
  3. उपयोगकर्ता की खोज फ़ील्ड मान एक नया मूल्य चयनित नहीं के लिए, बदलता है, तो कोई afterUpdateElement प्रयोग किया जाता है, और हमारे छिपा मूल्य अभी भी सही पर सेट किया जाता है। कि इस समस्या का हल एक कुंजी दबाने को सुनने के लिए है। एक कुंजी दबाने, तो छिपी हुई फ़ील्ड गलत करने के लिए वापस हो जाता है। यह सभी चाबी के लिए काम करता है, यहां तक ​​कि कुंजी दर्ज वास्तव में चयन करने के लिए प्रयोग किया जाता है। तो यह एक अपवाद हम अपने कुंजी दबाने श्रोता से निकाल देना चाहिए है। तो, अंत में हमारे अतिरिक्त कार्य करने के लिए एक नजर डालते हैं:

    $ (आईडी के- पाठ क्षेत्र) .observe ( "KeyUp", समारोह (ई) {

    अगर (window.event) कीकोड = window.event.keyCode;
    else if (ई) कीकोड = e.which;
    अगर (कीकोड! = 13) {

    $ (आईडी के- छिपा-क्षेत्र) .Value = "false";

    }

    } .bindAsEventListener ($ (आईडी के- पाठ क्षेत्र)));

हम तो छिपी हुई फ़ील्ड का उपयोग जानना चाहते हैं कि पाठ मान बनाए या संपादित किया जाना चाहिए कर सकते हैं ...

सावधान: इस समाधान के साथ, अगर उपयोगकर्ता प्रकार एक मौजूदा मूल्य से मेल खाते हैं, यह चयन करने के बिना एक मूल्य है, यह एक नया मान के रूप में विचार किया जाएगा, और एक डुप्लिकेट प्रविष्टि को बढ़ावा मिलेगा अगर आप अपने डेटाबेस को यह मूल्य जोड़ने। (लेकिन यह मेरे लिए ठीक था, जैसा कि मैंने नामों के साथ काम कर रहा था, और दो अलग अलग लोगों को एक ही नाम हो सकता है ...)

19/03/2009 को 12:34
का स्रोत उपयोगकर्ता

वोट
1

तुम इतनी तरह updateChoices विधि ओवरराइट करने का प्रयास कर सकते हैं:

Ajax.Autocompleter.prototype.updateChoices =  function (choices) {
if(!this.changed && this.hasFocus) {

      if(!choices) {
        //do your "new item" thing here
      }
      else {
         this.update.innerHTML = choices;
         Element.cleanWhitespace(this.update);
         Element.cleanWhitespace(this.update.down());

         if(this.update.firstChild && this.update.down().childNodes) {
           this.entryCount =
             this.update.down().childNodes.length;
           for (var i = 0; i < this.entryCount; i++) {
             var entry = this.getEntry(i);
             entry.autocompleteIndex = i;
             this.addObservers(entry);
           }
         } else {
           this.entryCount = 0;
         }

         this.stopIndicator();
         this.index = 0;

         if(this.entryCount==1 && this.options.autoSelect) {
           this.selectEntry();
           this.hide();
         } else {
           this.render();
         }
      }
   }
}

यह controls.js में अधिलेखित करने के लिए एक अच्छा ideea नहीं है। इसके बजाय आप एक नया .js को यह जोड़ सकते हैं और यह पुस्तकालय के बाद शामिल कर सकते हैं।

संपादित करें: पीएफएफ .. बुरा इंडेंट के बारे में खेद है, लेकिन यह कॉपी / पेस्ट TextMate से और है रिक्त स्थान के साथ संयुक्त टैब्स हैं। मुझे आशा है कि आप बिंदु हालांकि मिलता है। केवल एक चीज मैं जोड़ा था

      if(!choices) {
        //do your "new item" thing here
      }
      else {}

ब्लॉक। इसके अलावा, मैं कोड का परीक्षण नहीं किया, लेकिन मुझे लगता है कि यह काम करना चाहिए।

19/03/2009 को 12:38
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more