टाइप कर रहा है, मैं एक खोज बॉक्स (इनपुट फ़ील्ड) बना रहा हूं, जिसे सर्वर पर एक ग्रिड फ़िल्टर करने के लिए सर्वर कॉल करना चाहिए, लेकिन मुझे इसे एक स्मार्ट तरीके से बनाना होगा, मुझे इसकी आवश्यकता है केवल सर्वर कॉल को आग लगाना अगर उपयोगकर्ता बंद हो गया है। अभी मैं इसे लागू करने की कोशिश कर रहा हूं, लेकिन अगर कोई जानता है कि इसे कैसे किया जाए तो मैं बहुत खुश हूं। वैसे भी, अगर मैं इसे पहले करता हूं तो मैं यहां जवाब पोस्ट करूंगा ... बेस्ट विनर्ड्स, जैम।निर्धारित करें कि कोई उपयोगकर्ता
उत्तर
- जब एक कुंजी दबाने:
- चेक एक मौजूदा घड़ी हो, तो - इसे रोकने के अगर कोई हो
- एक टाइमर शुरू करते हैं।
- जब टाइमर समाप्त हो जाता है, तो सर्वर विधि को कॉल करें।
var searchTimeout;
document.getElementById('searchBox').onkeypress = function() {
if (searchTimeout != undefined) clearTimeout(searchTimeout);
searchTimeout = setTimeout(callServerScript, 250);
};
function callServerScript() {
// your code here
}
मैं जावास्क्रिप्ट के बारे में ज्यादा पता नहीं है, लेकिन आप एक टाइमर (5 सेकंड के लिए सेट करें बोलें की सुविधा देता है) कि आपके इनपुट बॉक्स के हर बदलाव घटना पर रीसेट हो जाता है इस्तेमाल कर सकते हैं। यदि उपयोगकर्ता 5 सेकंड से अधिक समय तक टाइपिंग बंद कर देता है, तो टाइमर समाप्त हो जाता है और जमा को ट्रिगर करता है।
उस दृष्टिकोण के साथ समस्या यह है कि जमा हर विराम पर ट्रिगर होता है, उदा। यदि उपयोगकर्ता कॉफी ब्रेक करने के लिए टाइपिंग बंद कर देता है। आपको देखना होगा कि यह उपयोगकर्ताओं के लिए स्वीकार्य है या नहीं।
आप setTimeout
अपने सर्वर समारोह (एक हो सकता है 2-3 सेकंड की देरी के साथ) एक कुंजी दबाने घटना पर कॉल करने के लिए कॉल इस्तेमाल कर सकते हैं। जैसे ही एकी दबाया जाता है, पिछले setTimeout
कॉल को रद्द करें और एक नया बनाएं।
फिर, कोई भी कुंजीपटल के साथ 2-3 सेकंड बीत चुके हैं, सर्वर ईवेंट निकाल दिया जाएगा।
हेहे ... आप चालाक शैतान निकफ! आप मुझसे भी तेज टाइप करते हैं। –
मुहहाह :) आपको लगता है कि मुझे * जानना * चीजों से यह प्रतिनिधि स्तर मिला है? हां! – nickf
हेहे ... आप कम से कम मुझे सांत्वना में उखाड़ फेंक सकते हैं: डी सब के बाद, मैंने * इसे * पता किया, और मेरा जवाब * सहायक है। –
आपकी प्रतिक्रिया के लिए धन्यवाद। मैं कोड के इस टुकड़े को लागू किया था और यह है कि यह काम (jQuery का उपयोग) करता है लगता है:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
var interval = 500;
var filterValue = "";
$(document).ready(function() {
$(".txtSearch").bind("keypress", logKeyPress);
});
function logKeyPress() {
var now = new Date().getTime();
var lastTime = this._keyPressedAt || now;
this._keyPressedAt = now;
if (!this._monitoringSearch) {
this._monitoringSearch = true;
var input = this;
window.setTimeout(
function() {
search(input);
}, 0);
}
}
function search(input) {
var now = new Date().getTime();
var lastTime = input._keyPressedAt;
if ((now - lastTime) > interval) {
/*console.log(now);
console.log(lastTime);
console.log(now - lastTime);*/
if (input.value != filterValue) {
filterValue = input.value;
//console.log("search!");
alert("search!");
}
input._monitoringSearch = false;
}
else {
window.setTimeout(
function() {
search(input);
}, 0);
}
}
</script>
के लिए दयालुता क्षमा करें, लेकिन मुझे नहीं लगता कि यह करने का एक बहुत अच्छा तरीका है ... क्या यह लगातार अंतराल तक खोज() को ऊपर और ऊपर कॉल नहीं करेगा? – nickf
नहीं, यह तब बंद हो जाएगा जब आखिरी बार एक कुंजी दबाया गया था और वर्तमान समय> * अंतराल * चर (खराब नाम मुझे पता है) के बीच का अंतर। अपने आप से कोशिश करो। –
यहाँ एक सरल है जिस तरह से jQuery के बिना काम करेगा:
<input type="text" id="TxtSearch" onchange="countDown=10;" />
<script type="text/javascript">
var countDown = 0;
function SearchTimerTick()
{
if(countDown == 1)
{
StopTypingCommand();
countDown = 0;
}
if(countDown > 0)
countDown--;
}
window.setInterval(SearchTimerTick,1000);
</script>
तुम भी शायद इनपुट बॉक्स पर स्ट्रिंग की लंबाई की जांच करना चाहते हैं, अन्यथा एक विशाल परिणाम सेट लौटने का खतरा!
बहुत सच्चा बिंदु - हालांकि यह शायद सर्वर-साइड किया जा सकता है। निश्चित रूप से एक खाली स्ट्रिंग के लिए जांच करें। – nickf
आपकी टिप्पणी के लिए धन्यवाद, असली एप्लिकेशन में एक खाली बॉक्स एक वैध मानदंड फ़िल्टर है (इसका मतलब है * मुझे सबकुछ दिखाएं *), मैं परिणाम पेजिंग कर रहा हूं इसलिए कोई ओवरहेड नहीं है। –
- 1. यह निर्धारित करें कि कोई उपयोगकर्ता मार्केट लिंक
- 2. यह निर्धारित करें कि उपयोगकर्ता द्वारा
- 3. निर्धारित करें कि उपयोगकर्ता ने SQL सर्वर
- 4. फ्लेक्स: निर्धारित करें कि कोई घटक
- 5. निर्धारित करें कि कोई नामित पैरामीटर
- 6. पायथन: निर्धारित करें कि कोई वर्ग नेस्टेड
- 7. निर्धारित करें कि कोई संपत्ति प्रतिबिंब
- 8. यह निर्धारित करें कि कोई छवि Matlab
- 9. यह निर्धारित करें कि कोई प्रविष्टि एफ़टीपी
- 10. यह निर्धारित करें कि कोई फ़ाइल
- 11. निर्धारित करें कि कोई प्रकार स्थिर है
- 12. निर्धारित करें कि कोई घटना अभी तक
- 13. निर्धारित करें कि अधिसूचना
- 14. निर्धारित करें कि
- 15. php: निर्धारित करें कि
- 16. निर्धारित करें कि प्रतिबिंब
- 17. निर्धारित करें कि w3wp.exe
- 18. निर्धारित करें कि ग्रहण
- 19. निर्धारित करें कि PHP
- 20. PHP - निर्धारित करें कि http
- 21. निर्धारित करें कि टेक्स्ट बॉक्स
- 22. यह निर्धारित करें कि UIScrollView
- 23. जांचें कि कोई उपयोगकर्ता वर्तमान में Windows
- 24. निर्धारित करें कि कोई वेब सेवा कब उपलब्ध है
- 25. निर्धारित करें कि कोई HTML तत्व की सामग्री
- 26. निर्धारित करें कि कोई तत्व एक फॉर्म फ़ील्ड है
- 27. निर्धारित करें कि कोई सूत्र (मान) किसी भी सूत्र
- 28. यह निर्धारित करें कि कोई संसाधन संसाधन प्रबंधक
- 29. निर्धारित करें कि जब कोई व्यूपर पेज बदलता है
- 30. निर्धारित करें कि कोई टेबलव्यू सेल दिखाई दे रहा है
यकीन है कि टाइमर लेकिन जब तक आप ताकि आप छोटे रुक जाता है पकड़ने के न 'टाइप किया' पर विचार की देरी है रहो। वैकल्पिक रूप से, जब उपयोगकर्ता टेक्स्टबॉक्स से बाहर क्लिक करता है तो यह देखने के लिए ऑनब्लूर ईवेंट का उपयोग करें। – Karl
हाँ, देरी कैसे गहन देखने है, आप कैसे उत्तरदायी चाहते हैं कि उसे होना करने के लिए पर निर्भर होना चाहिए, और यह भी: कितनी तेजी से अपने उपयोगकर्ताओं को सामान्य रूप से लिखें। मैंने एक खोज के लिए 250 एमएमएस का उपयोग किया है और यह ठीक आईएमओ रहा है। – nickf
घटना onkeypress नहीं हो, या ऐसा ही कुछ करना चाहिए? –