2009-01-17 12 views
5

का उपयोग करके 'कीडाउन' घटनाओं को पंजीकृत करने के बाद लेटेगाईवेंट में कोड का एक गुच्छा संलग्न करने के बारे में कोई कैसे जाता है, लेकिन textarea में तेज़ी से और कुरकुरा में टेक्स्ट दर्ज करना जारी रखें? कुछ आईएफ स्टेटमेंट्स से ज्यादा कुछ भी इसे काफी धीमा कर देता है।टेक्स्टरेरा जावास्क्रिप्ट

संपादित करें: मुझे जोड़ना चाहिए (विश्वास नहीं कर सकता मैं भूल गया!) कि यह डेस्कटॉप ब्राउज़र को प्रभावित नहीं करता है। यह मुख्य रूप से आईफोन सफारी के साथ एक मुद्दा है। अन्य मोबाइल ब्राउज़र भी प्रभावित हो सकते हैं, लेकिन हम आईफोन सफारी पर ध्यान केंद्रित कर रहे हैं क्योंकि यह जेएस को सर्वश्रेष्ठ (AFAIK)

उत्तर

0

ठीक है, जाने का एक तरीका ऑनकीडाउन का उपयोग नहीं करेगा, बल्कि इसके बजाय टाइमर का उपयोग करेगा। आप TextArea की सामग्री की जांच करने वाले फ़ंक्शन को चलाने वाले अंतराल को सेट कर सकते हैं और वहां अपना तर्क चला सकते हैं। ऐसा लगता है कि यह ज्यादातर ओवरहेड पास करेगा। वैसे भी, इसे एक शॉट दें, मुझे लगता है कि यह मदद कर सकता है।

यहाँ कैसे आप इसका इस्तेमाल होता है:

// First param is the function to call, second is 
// time interval in miliseconds 
var timer = setTimeout(checkTextArea(), 5000); 

function checkTextArea() { 
    var text = document.getElementById("textarea").value; 
    // logic... 
    timer = setTimeout(checkTextArea(), 5000); // we loop it back to 
               //the function with the timer 
} 
2

अपने संपादित इस iPhone का उपयोग पर ध्यान केंद्रित किया जा रहा के बारे में ...

iPhone ध्यान में रखते हुए वास्तव में सिर्फ यह है कि ज्यादा बिजली नहीं है। तुम बस onchange या onblur बजाय onkeydown का उपयोग कर से बेहतर हो जाएगा।

var textarea = document.getElementById('textarea'); 

function checkTextArea() { 
    if (textarea.value /* ... */) { 
    /* ... */ 
    } 
} 

textarea.keyDownTimeout = null; 
textarea.onkeydown = function() { 
    if (textarea.keyDownTimeout) clearTimeout(textarea.keyDownTimeout); 
    textarea.keyDownTimeout = setTimeout(checkTextArea, 5000); 
}; 

यह रोक और पुनः बनाने, पहले keydown साथ टाइमर सेट करना चाहिए:



डेव के जवाब के लिए एक वैकल्पिक उपयोगकर्ता (5 सेकंड के लिए उदाहरण के लिए) को रोकने के लिए इंतज़ार कर रहा है प्रत्येक क्रमिक keydown के लिए टाइमर। अंत में उपयोगकर्ता टाइपिंग बंद होने के 5 सेकंड बाद कॉल कर रहा है।

इसके अलावा, checkTextArea के बाद कोष्ठक की कमी पर ध्यान दें। यह setTimeout फ़ंक्शन का संदर्भ बनाम return देगा।


तुम भी यह आसान कई तत्वों के लिए उपयोग करने के लिए बनाने के लिए एक समारोह में सेट कर सकते हैं:

function setPauseTimer(element, timeout, callback) { 
    var timer = null; 
    element.onkeydown = function() { 
    if (timer) clearTimeout(timer); 
    timer = setTimeout(function(){ callback(element); }, timeout); 
    }; 
} 

function checkTextArea(textarea) { /* moved from global to argument */ 
    if (textarea.value /* ... */) { 
    /* ... */ 
    } 
} 

setPauseTimer(document.getElementById('textarea'), 5000, checkTextArea); 
1

शायद तुम "कोड का एक समूह" पोस्ट कर सकता है और हम वहाँ कुछ है कि क्या विचार-विमर्श करते वहाँ refactoring (एक टाइमर के साथ जटिल बनाने से पहले)। ऐसा लगता है कि आप पहले माध्यमिक अनुकूलन पर कूद सकते हैं।

+0

दुर्भाग्य से मैं नहीं कर सकता, क्योंकि यह कंपनी नीति का हिस्सा है। इससे मामलों को जटिलता मिलती है, हां, लेकिन मुझे उम्मीद थी कि किसी को सामान्य समाधान मिल सकता है। – aditya

+0

यह देखते हुए कि सेल फोन ऐप की गुणवत्ता माइक्रोग्रेन किए गए कीस्ट्रोक प्रबंधन पर इतनी गंभीर रूप से निर्भर है, मैं टाइमर आदि से बचने की कोशिश करता हूं - उपयोगकर्ता की आंख अक्सर प्रदर्शन और कीबोर्ड के बीच बातचीत के लिए मजबूती से चिपक जाती है। क्या आप कुछ सामान्यीकृत कर सकते हैं और इसे पोस्ट कर सकते हैं? – dkretz

0

मैंने टाइमर विधियों के बारे में सोचा था। मेरा मानना ​​है कि setTntervalsetTimeout से बेहतर होगा, लेकिन यह शायद ही कोई इष्टतम समाधान प्रतीत होता है, है ना?