通过单击复选框启动智能功能

Launch a smarty function by clicking a checkbox

本文关键字:智能 功能 启动 复选框 单击      更新时间:2023-09-26

我正在玩smarty和jquery...

实际上,我有一个更拉格的项目,我想改进我的资源以更好地处理。

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

<input type="checkbox" aria-label="..." checked>
<button onclick='fnTest({$options})'>test</button>

因为我想调用一个 js 函数并通过 JSON 传递一些数据,所以我在这个页面中有一行看起来像:

{$options = '{"preview":1, "extra_paper":0}'}

实际上只是创建一个包含 JSON 字符串的智能变量。

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

function fnTest(obj){
    console.log(obj);
}

一切都很好,直到这里。现在我想在选中/取消选中复选框后立即更改 JSON 字符串中的一些内容。

检查:

{$options = '{"preview":1, "extra_paper":1}'}

猖獗

{$options = '{"preview":1, "extra_paper":0}'}

我尝试使用智能功能

{function name=presets}
    //some source to write the JSON-String new
    {$data}
{/function}

那叫像

{presets data="checkstatus"}

但这里的问题是,我不知道如何在复选框操作上启动此功能......

也许还有另一种方法可以做到这一点,我想做的事情......

所以主要问题是:

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

有没有办法在模板上重新创建 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.

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

有了这个,我可以在检查事件上调用JS-Functions,该函数将数据获取/设置到存储,以后可以轻松地让它决定进一步做什么。

感谢您的帮助:)