self
is not in scope. This is begging for a class syntax:
class SwitchHider
@inputSelector: 'body.socials input'
constructor: ->
$(document).on 'ready', =>
$(SwitchHider.inputSelector).each (index, element) =>
@_showOrHideClosestSwitch(element)
$(document).on 'change keyup input', SwitchHider.inputSelector, (e) =>
@_showOrHideClosestSwitch(e.target)
_showOrHideClosestSwitch: (element) ->
socialUrl = $(element).val()
swich_wrapper = $(element).closest('.white-box').find('.switch')
if socialUrl.length > 0
swich_wrapper.show()
else
swich_wrapper.hide()
# Send to global namespace
window.SwitchHider = SwitchHider
# DOM Ready
$ ->
new SwitchHider()
I used the =>
to handle proper scope of this