Skip to content

Instantly share code, notes, and snippets.

@thbar
Created September 14, 2011 08:53
Show Gist options
  • Save thbar/1216136 to your computer and use it in GitHub Desktop.
Save thbar/1216136 to your computer and use it in GitHub Desktop.
$('#quick_entry form').live 'submit', (event) ->
event.preventDefault() # just moved up!
event.stopPropagation() # just moved up!
return false if @beenSubmitted
@beenSubmitted = true
clearNotice()
$.ajax({
type: 'POST'
url: @action
dataType: 'json'
data: $(@).serialize()
success: (response) ->
setNotice(response.bill)
resetAndFocusForm()
error: (response) ->
if response.status == 422
setErrorFields JSON.parse(response.responseText)['error_fields']
else
alert("An error occurred!")
complete: =>
@beenSubmitted = false
})
@thbar
Copy link
Author

thbar commented Sep 14, 2011

@dhruvasagar thanks for the link!

@alexrothenberg
Copy link

Could you rewrite lines 4-7 from

if @beenSubmitted
  return false
else
  @beenSubmitted = true
... rest of the code...

to

return false if @beenSubmitted

@beenSubmitted = true
... rest of the code...

@thbar
Copy link
Author

thbar commented Sep 14, 2011

@alexrothenberg very good point, thanks

@TrevorBurnham
Copy link

As other commenters have suggested: Just put false at the end rather than putting event.preventDefault() and event.stopPropagation() at the beginning.

You said you were concerned that if an exception is thrown, the return false won't be reached. But unless clearNotice might throw an exception, there's no chance of that; any error that occurs in $.ajax and the callbacks you give it will happen asynchronously—after the function has already returned.

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