Skip to content

Instantly share code, notes, and snippets.

@hijonathan
Last active August 29, 2015 13:57
Show Gist options
  • Save hijonathan/9518076 to your computer and use it in GitHub Desktop.
Save hijonathan/9518076 to your computer and use it in GitHub Desktop.
$.event.special.textchange =
setup: ->
$el = $ @
timer = null
$el.data 'lastValue', getElValue(@)
handler = (event) =>
current = getElValue(@)
lastValue = $el.data 'lastValue'
if current isnt lastValue
triggerCustomEvent @, 'textchange', event, [lastValue]
$el.data 'lastValue', current
$el.on 'keyup.textchange', handler
$el.on 'cut.textchange paste.textchange input.textchange', (event) ->
clearTimeout timer
timer = setTimeout ->
handler event
, 25
return
teardown: ->
$(@).off '.textchange'
getElValue = (el) ->
$el = $ el
return if el.contentEditable is 'true' then $el.html() else $el.val()
triggerCustomEvent = (obj, eventType, event, data) ->
originalType = event.type
event.type = eventType
$.event.dispatch.call obj, event, data
event.type = originalType
@eipark
Copy link

eipark commented Mar 13, 2014

Sweet, I'll test for all my cases when I get a chance... Copy/paste, repeated key strokes should trigger, delete/backspace, IE9.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment