प्रत्येक उत्तर में कुछ बिंदु गायब हैं, इसलिए यहां मेरा समाधान है:
$("#input").on("input", function(e) {
var input = $(this);
var val = input.val();
if (input.data("lastval") != val) {
input.data("lastval", val);
//your change action goes here
console.log(val);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
<p>Try to drag the letters and copy paste</p>
Input Eventपर आग कीबोर्ड इनपुट, माउस खींचें , स्वत: भरण और प्रतिलिपि बनाने-चिपकाने Chrome और Firefox पर परीक्षण किया। पिछले मूल्य के लिए जाँच करने से यह वास्तविक परिवर्तनों का पता लगाता है, जिसका अर्थ है कि एक ही चीज़ को चिपकाते समय या एक ही चरित्र को टाइप करते हुए फायरिंग न करना या आदि।
काम करने का उदाहरण: http://jsfiddle.net/g6pcp/473/
अपडेट करें:
और यदि आप अपना change function केवल तभी चलाना पसंद करते हैं जब उपयोगकर्ता टाइप करना समाप्त कर देता है और कई बार परिवर्तन कार्रवाई को रोकने के लिए, आप यह कोशिश कर सकते हैं:
var timerid;
$("#input").on("input", function(e) {
var value = $(this).val();
if ($(this).data("lastval") != value) {
$(this).data("lastval", value);
clearTimeout(timerid);
timerid = setTimeout(function() {
//your change action goes here
console.log(value);
}, 500);
};
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
यदि उपयोगकर्ता टाइप करना शुरू कर देता है (उदाहरण के लिए "foobar") तो यह कोड आपके change actionप्रत्येक अक्षर उपयोगकर्ता प्रकारों के लिए चलने से रोकता है और केवल तब चलता है जब उपयोगकर्ता लिखना बंद कर देता है, यह विशेष रूप से तब होता है जब आप सर्वर को इनपुट भेजते हैं (जैसे खोज इनपुट), जिस तरह से सर्वर करता है केवल एक के लिए खोज foobarऔर के लिए नहीं छह खोजें fऔर फिर foऔर फिर fooऔर foobऔर इतने पर।