I looked for appropriate answers for this on the smarty site, and the resounding answer was escaping javascript’s {}s with {literal}’s
Smarty template vars and Javascript functions
How to use Javascript codes in template files?
Access Smarty value with javascript
They basically all say to do something like this:
// $question_ids_json = ["1","2","3","4","5"] {literal} <script> $(document).ready(function(){ var question_ids = {/literal}{$question_ids_json}{literal}; alert(question_ids[0]); }); </script> {/literal}
So they want to put everything in a literal tag, and then basically escape that literal tag when smarty needs to be used.
I didn’t like this, so I put the value in a hidden input and then just retrieved that input in the javascript, thereby keeping the js clean of smarty shenanigans:
<input type="hidden" id="question_ids" value='{$question_ids_json}'/> <script> $(document).ready(function(){ //var question_ids = {$question_ids_json}; var question_ids = eval($('#question_ids').val()); alert(question_ids[0]); }); </script>
But this is just a matter of personal preference.