单击复选框启动智能功能

时间:2015-01-06 11:53:13

标签: javascript jquery json smarty

我正在玩smarty和jquery ......

实际上我有一个更大的项目,我想改善我的来源以获得更好的handeling。

现在我拥有的是包含一些内容的HTML页面(.tpl)。在一行中,我有一个复选框,如:

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

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

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

实际上只是创建一个包含JSON-String的Smarty变量。

在我的jsFile上只需使用console.log()(目前)查看最新情况。

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

到此为止,一切都很好。现在,我想在选中/取消选中复选框后立即更改JSON-String中的一些。

经过:

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

未检查

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

我尝试使用Smarty-Function

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

被称为

{presets data="checkstatus"}

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

可能还有另外一种方法可以做到这一点...

所以主要问题是:

是否有可能在复选框事件中使用Smarty-Function?

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

2 个答案:

答案 0 :(得分:2)

您的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

答案 1 :(得分:0)

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

有了这个,我可以在Check-Event上调用JS-Functions来获取/设置数据到存储,稍后可以轻松地决定如何进一步做。

感谢您的帮助:)