2017-08-03 13 views
6

मेरे पास एक कोणीय 2 ऐप है जो प्राइमएनजी घटकों का उपयोग करता है।कोणीय: स्वत: पूर्ण फ़ील्ड किसी आइटम को हटाने के बाद फोकस बदलता है

यूआई the documentation से साथ बहु-चयन (p-autoComplete) स्वत: पूर्ण घटक एक जैसी ही है:

<p-autoComplete [(ngModel)]="countries" 
       [suggestions]="filteredCountriesMultiple" 
       (completeMethod)="filterCountryMultiple($event)" 
       [minLength]="1" 
       placeholder="Countries" 
       field="name" 
       [multiple]="true"> 
</p-autoComplete> 

फर्क सिर्फ इतना है कि मेरे मामले में इनपुट क्षेत्र आयाम और स्क्रॉल पट्टी तय किया है।

समस्या:

हर बार जब मैं स्वतः पूर्ण सूची यह इनपुट क्षेत्र की तह तक ले जाता है फोकस के मध्य से एक तत्व को हटा दें। यह इस तरह दिखता है:

enter image description here

यह उपयोगकर्ताओं के लिए बहुत कष्टप्रद है, खासकर जब वहाँ कई क्षेत्रों है कि हटाया जाना चाहिए रहे हैं।

प्रश्न: तत्व को हटाने के बाद उसी स्थिति पर रहने के लिए स्क्रॉल को कैसे बल देना है?

पुन: पेश करने के लिए:

अधिक विशिष्ट होना करने के लिए, आप documentation pageui-autocomplete-multiple-container.ui-inputtext में सीएसएस ब्राउज़र कंसोल का उपयोग वर्ग पर सीधे अगले सीएसएस

max-width: 150px; 
max-height: 100px; 
overflow-y: auto; 

जोड़कर इस मुद्दे को दोबारा कर सकते हैं।

अद्यतन:

onUnselect(event: any) { 
    document.querySelector("div.my-input-class").scrollTop 
} 

अद्यतन 2: मैं इस तरह कोड का उपयोग कर घटक में onUnselect विधि की स्थापना करके स्क्रोलर स्थिति पाने में कामयाब रहे कि मैं यह काम करने के लिए प्रबंधित

समाधान onUnselect और onFocus ईवेंट हैंडलर का संयोजन है।

पहले। मैं अंतिम स्क्रॉलर स्थिति को onUnselect कॉल में किसी फ़ील्ड में सहेजता हूं।

दूसरा। मैंने इस मान को onFocus कॉल के दौरान निर्दिष्ट तत्व पर सेट किया है।

इसी कोड इस तरह दिखता है:

scrollPosition: number = 0; 

onUnselect(event: any) { 
    let input = document.querySelector("div.my-input-class"); 
    this.scrollPosition = input.scrollTop; 
} 

onFocus(event: any) { 
    let input = document.querySelector("div.my-input-class"); 
    input.scrollTop = this.scrollPosition; 
} 

यह अच्छी तरह से काम करता है और शायद इस अंतिम समाधान हो जाएगा।

हालांकि मुझे यह पसंद नहीं है। अगर प्राइमएनजी लोग अपने घटक में ऐसी उपयोगी कार्यक्षमता एम्बेड करते हैं तो यह बेहतर होगा। मेरे लिए यह अजीब बात है कि यह बॉक्स से क्यों नहीं निकलता है।

यदि आपको बेहतर समाधान मिलता है तो कृपया प्रस्ताव दें।

+0

आप पुन: पेश करने के लिए एक plunker बना सकते हैं? – Aravind

+0

ऐसा लगता है जैसे कर्सर कूदते व्यवहार का कारण बन रहा है। तो मैं किसी आइटम को हटाए जाने पर कर्सर को अक्षम करने की कोशिश करने की सलाह दूंगा (शायद तत्व को अक्षम करके) या आइटम को हटाने से पहले फोकस को किसी अन्य तत्व पर स्विच करने का प्रयास करें। मुझे नहीं पता कि आप जिस नियंत्रण का उपयोग कर रहे हैं वह आपको ऐसा करने देगा, लेकिन जब तक मैं कंप्यूटर तक पहुंच प्राप्त नहीं करता तब तक मैं इसका परीक्षण नहीं कर सकता – Sal

+0

इसके अलावा, यह मैंने देखा है कि सबसे अच्छे संरचित प्रश्नों में से एक है। आपकी समस्या को देखना/समझना वास्तव में आसान था। उस पर समय और प्रयास करने के लिए धन्यवाद! – Sal

उत्तर

1

आप नीचे दिए गए के रूप में ही संभाल करने onFocus घटना का उपयोग करना चाहिए,

<p-autoComplete [(ngModel)]="countries" 
       [suggestions]="filteredCountriesMultiple"      
       (completeMethod)="filterCountryMultiple($event)" 
       styleClass="width12" (onFocus)="onFocus($event)"> 

    .... 


onFocus(event){ 
     window.scrollTo(0, 0); 

} 

LIVE DEMO

+1

हो सकता है कि मैं कुछ गलत कर रहा हूं, लेकिन मैंने कोशिश की और यह काम नहीं करता है। और डेमो में कोई स्क्रॉलबार नहीं है इसलिए इसे जांचने का कोई तरीका नहीं है। वैसे भी मुझे समझ में नहीं आया कि विशेष पृष्ठ तत्व के अंदर स्क्रॉल बार पर विंडो की संपत्ति प्रभाव कैसे स्थापित कर सकता है? मेरे मामले में मुझे इनपुट तत्व के अंदर स्क्रोलर की स्थिति सेट करने की आवश्यकता है, पृष्ठ से कोई नहीं। –

+0

@ ऑलेक्ज़ेंडरस्पोटा विंडो आकार और परीक्षण को कम करता है। – Aravind

+0

अब मुझे तुम्हारा क्या मतलब है। हो सकता है कि सवाल पूरी तरह से स्पष्ट न हो - मुझे इनपुट तत्व पर स्क्रॉलर को नियंत्रित करने की आवश्यकता है, खिड़की से नहीं। आपके द्वारा प्रस्तावित कोड विंडो की स्क्रोलर स्थिति बदलता है। –

1
onUnselect(event: any) { 
    // get index of the removed element 
    // get total options count 
    // get height of the element that contains the options 
    // divide the height by number of options 
    // set scroll potion to the result of division multiplied by the index 
    document.querySelector('.ui-autocomplete-multiple-container.ui-inputtext').scrollTop = calculatedValue; 
} 
+0

स्क्रॉल स्थिति सेट करने का प्रस्ताव आप वास्तव में कैसे करते हैं? मुझे तत्व मिलता है और इसकी 'स्क्रॉलटॉप' सेट होती है और यह गणना के बिना भी काम नहीं करती है। आइए मान लें कि मैंने तत्व के 'scrollTop' को 100 पर सेट किया है - स्क्रॉल पहले की तरह नीचे तक कूदता है। –

+0

अद्यतन उत्तर की जांच करें –

+0

यह वही है जो मैंने अपनी टिप्पणी में अभी समझाया है, मैंने इस तरह से प्रयास किया है और यह काम नहीं करता है :( –

संबंधित मुद्दे