Javascript 通过单击复选框启动smarty功能

Javascript 通过单击复选框启动smarty功能,javascript,jquery,json,smarty,Javascript,Jquery,Json,Smarty,我正在和smarty和jquery玩 事实上,我有一个更大的项目,我想改善我的资源更好地处理 现在我有了一个HTML页面(.tpl)和一些内容。在一行中,我有一个复选框,如: <input type="checkbox" aria-label="..." checked> <button onclick='fnTest({$options})'>test</button> 实际上只是创建了一个包含JSON字符串的Smarty变量 在我的jsFile上,只需使

我正在和smarty和jquery玩

事实上,我有一个更大的项目,我想改善我的资源更好地处理

现在我有了一个HTML页面(
.tpl
)和一些内容。在一行中,我有一个复选框,如:

<input type="checkbox" aria-label="..." checked>
<button onclick='fnTest({$options})'>test</button>
实际上只是创建了一个包含JSON字符串的Smarty变量

在我的jsFile上,只需使用
console.log()
(此时)查看传递的内容

function fnTest(obj){
    console.log(obj);
}
在这里之前一切都很好。现在,我想在选中/取消选中复选框后立即更改JSON字符串中的一些内容

检查:

{$options = '{"preview":1, "extra_paper":1}'}
未经检查

{$options = '{"preview":1, "extra_paper":0}'}
我尝试使用Smarty功能

{function name=presets}
    //some source to write the JSON-String new
    {$data}
{/function}
这就是所谓的like

{presets data="checkstatus"}
但问题是,我不知道如何在复选框操作上启动此函数

也许还有别的方法来做我想做的事

因此,主要问题是:

是否有可能在复选框事件上启动Smarty功能?


有没有办法在模板上重新创建JSON字符串并将其传递给函数?

您的javascript代码不知道HTML是如何生成的,无论是通过PHP/Smarty还是其他方式生成的

您可以做的是对服务器进行AJAX调用,以获取新生成的HTML,并将其注入到您想要的任何地方:

$('.yourCheckbox').change(function(event){

  // you get 'someParam' from either your checkbox status, or from the surrounding form...it's up to you
  $.get('path/to/your/script', { someParam : someValue }, function(data){

    // inject received html into a proper div
    $('someSelector').html(data);

  });

});
然后,您需要了解以下内容:

  • 不编写内联js[例如,
    onclick=…
  • 使用正确的路由系统,而不是简单的
    path/to/myScript.php

我使用的解决方案是,因为这个项目中的所有用户都必须升级他们的浏览器。实际上,它绑定到了Chrome,所以在这种情况下,将一些JSON字符串传递给JS函数是最好的方法

有了这个,我可以在Check事件上调用JS函数,该事件将数据获取/设置到存储器,以后可以很容易地让它决定进一步做什么


感谢您的帮助:)

Thx提供了这个提示。实际上我不需要学习这个。就像我说的,这是一个有点大的项目,99%没有onClick。元素有类,它们绑定到clickevents。但在某些情况下(非常罕见)需要这种类型的代码,因为否则处理一件简单的事情需要大量的工作。而且,其他一些客户可能会遇到一些问题:)而注入代码实际上并不是我想要的。我将使用
$('.yourCheckbox').change(function(event){

  // you get 'someParam' from either your checkbox status, or from the surrounding form...it's up to you
  $.get('path/to/your/script', { someParam : someValue }, function(data){

    // inject received html into a proper div
    $('someSelector').html(data);

  });

});