From 3bb3601ffc30ebabb1dadd38b901ef1ddf410b43 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Thu, 20 Aug 2015 17:27:42 +0200 Subject: [PATCH] jquery.byteLimit: Trigger 'change' event after limitting For better interoperability with scripts that are unaware of it. Since jquery.byteLimit itself listens to the 'change' event, tweak the conditions to avoid getting stuck in an infinite loop. Change-Id: Ie782d14ba7d676b248109a3179bbec19552dfc52 --- resources/src/jquery/jquery.byteLimit.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/resources/src/jquery/jquery.byteLimit.js b/resources/src/jquery/jquery.byteLimit.js index e2315d2326..5ffcae8dcf 100644 --- a/resources/src/jquery/jquery.byteLimit.js +++ b/resources/src/jquery/jquery.byteLimit.js @@ -86,11 +86,11 @@ } } - newVal = inpParts.join( '' ); - return { - newVal: newVal, - trimmed: true + newVal: inpParts.join( '' ), + // For pathological fn() that always returns a value longer than the limit, we might have + // ended up not trimming - check for this case to avoid infinite loops + trimmed: newVal !== inpParts.join( '' ) }; } @@ -219,6 +219,9 @@ // This is a side-effect of limiting after the fact. if ( res.trimmed === true ) { this.value = res.newVal; + // Trigger a 'change' event to let other scripts attached to this node know that the value + // was changed. This will also call ourselves again, but that's okay, it'll be a no-op. + $el.trigger( 'change' ); } // Always adjust prevSafeVal to reflect the input value. Not doing this could cause // trimValueForByteLength to compare the new value to an empty string instead of the -- 2.20.1