2013-11-03 6 views
12

मैं इनपुट के अंदर कर्सर की स्थिति प्राप्त करने के लिए jQuery TextRange नामक एक प्लगइन का उपयोग कर रहा हूं (मेरे मामले में, एक टेक्स्टरेरा) और स्थिति भी सेट करें।jQuery में "इनपुट परिवर्तन के अंदर कर्सर स्थिति" का पता लगाएं?

लेकिन अब मेरे पास एक बात है - मुझे लगता है - हल करना मुश्किल है। मैं जानना चाहता हूं कि jQuery में "कर्सर स्थिति बदल गई" जैसी एक घटना मौजूद है या नहीं।

$('#my-input').on('cursorchanged', function(e){ 
    // My code goes here. 
)}; 

मुझे पता है कि जब कर्सर इनपुट/पाठ क्षेत्र के अंदर ले जाया जाता है चाहता हूँ, अगर तीर कुंजी या माउस क्लिक द्वारा कोई फर्क नहीं पड़ता: क्या मेरा मतलब है कुछ की तरह है। मैं एक jQuery नौसिखिया हूँ, लेकिन मुझे लगता है कि jQuery पर इस तरह की घटना मौजूद नहीं है, या मौजूद है?

+5

क्या आप केवल 'कीप'/'कीडाउन' और' क्लिक' 'को गठबंधन नहीं कर सकते हैं? ऐसा मत सोचो कि एक ऐसा कार्यक्रम है जो जांचता है कि कर्सर की स्थिति बदल गई है या नहीं। – putvande

+0

मुझे लगता है कि यह वह समाधान हो सकता है जिसे आप ढूंढ रहे हैं: http://web.archive.org/web/20080214051356/http://www.csie.ntu.edu.tw/~b88039/html/jslib/caret। एचटीएमएल – hayavuk

+0

@bvukelic: यह एक घटना नहीं है। – Ryan

उत्तर

14

नहीं, "कर्सर स्थिति बदल गई" जैसी कोई घटना नहीं है।

लेकिन अगर आप अगर कर्सर की स्थिति बदल जानना चाहते हैं, तो आप कुछ इस तरह कर सकते हैं: jQuery 1.7 के साथ परीक्षण किया, मैं IE8 में परीक्षण किया है और क्रोम

var last_position = 0; 
$(document.ready(function() { 
    $("#my_input").bind("keydown click focus", function() { 
     console.log(cursor_changed(this)); 
    }); 
}); 

console.log अगर वापस आ जाएगी कर्सर बदल गया है

function cursor_changed(element) { 
    var new_position = getCursorPosition(element); 
    if (new_position !== last_position) { 
     last_position = new_position; 
     return true; 
    } 
     return false; 
} 

function getCursorPosition(element) { 
    var el = $(element).get(0); 
    var pos = 0; 
    if ('selectionStart' in el) { 
     pos = el.selectionStart; 
    } else if ('selection' in document) { 
     el.focus(); 
     var Sel = document.selection.createRange(); 
     var SelLength = document.selection.createRange().text.length; 
     Sel.moveStart('character', -el.value.length); 
     pos = Sel.text.length - SelLength; 
    } 
    return pos; 
} 
+1

जब वे संदर्भ मेनू क्रियाओं (कट/पेस्ट/पूर्ववत/हटाएं) के कारण होते हैं तो कर्सर स्थिति में परिवर्तनों को नोटिस नहीं किया जाता है। – Robert

+5

आपको 'कीडाउन' के बजाय' कीप 'का उपयोग करने की आवश्यकता है, अन्यथा कॉलबैक कुंजी ईवेंट के बाद अगले की बजाय पिछली कैरेट स्थिति लेगा। –

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