in Troubleshooting

Weird Sammy + jQuery on IE error

Here’s a post that might help problems with Sammy routes, callbacks, and event handlers using jQuery, especially the “live” function.

I have an input form with submit buttons like:

1
2
3
4
<form>
<input type="submit" name="what" value="SomeCommand" />
<input type="submit" name="what" value="DifferentCommand" />
</form>

This didn’t play well with Sammy, as it doesn’t load the value of what into it’s params hash. So, I did a work around like:

1
2
3
4
5
6
// hack to allow sammy to access the 'what' param
$('form input[type=submit]').live('click', function(){
  var submit = $(this),
    form = submit.parents('form');
  form.find('input[name=what][type=hidden]').val(submit.val());
});

I’m not sure why I originally chose to use “live.” It could’ve been that I was building DOM dynamically using jquery-tmpl. In Firefox and Chrome, this worked as expected. In IE, the Sammy route handler would fire before the click handler above! So, I changed the code to use the non-live version.

1
2
3
$('form input[type=submit]').click(function(){ // changed
  ...
});