Estoy tratando de ejecutar una función js usando parámetros pasados a la plantilla a través de jinja, donde el elemento contiene cadenas de la siguiente manera:
item.id = 'item1' item.indicator = 'yes' #or noCódigo de plantilla:
{% for item in items %} <!--The error is thrown by the line directly below!--> <div class='qitem' id='{{item.id}}' onclick = change_background('{{item.indicator}}', '{{item.id}}')></div> {% endfor %} <script> function change_background(indicator, id){ if (indicator == 'yes'){ document.getElementById(id).style.background='lightgreen'; }else{ document.getElementById(id).style.background='pink'; </script> En la línea culpable de mi código, '{{item.indicator}}' está en rojo y el primer ' está subrayado en vscode.
El código funciona a pesar de esto, si solo usa UN argumento de la siguiente manera: change_background('{{item.indicator}}') (con la función correspondiente ajustada en consecuencia), pero no funciona si trato de usar dos argumentos.
El orden de los argumentos no parece importar. Tampoco usar "{{}}" en lugar de '{{}}' .
Además, si intento ejecutar dos funciones onclick: <div class='qitem' id='{{item.id}}' onclick = make_green('{{item.id}}'); increment_click('{{item.indicator}}')>
¡solo se ejecuta el primero, y el segundo se ignora sin que se arroje ningún error!
He buscado aquí y en otros lugares. Realmente no quiero jsonificar los datos que paso a la plantilla. Siento que hay un matiz que me falta cuando uso jinja.
El matiz aquí es simplemente su uso de JavaScript en HTML.
Necesitarás
onclick="change_background('{{item.indicator}}', '{{item.id}}')"en vez de
onclick = change_background('{{item.indicator}}', '{{item.id}}')>para envolver correctamente el segmento de JavaScript entre comillas.
Además, si intento ejecutar dos funciones al hacer clic:
<div class='qitem' id='{{item.id}}' onclick = > make_green('{{item.id}}'); increment_click('{{item.indicator}}')>
Lo mismo aqui.
onclick="make_green('{{item.id}}');increment_click('{{item.indicator}}')"