我正在玩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并将其传递给函数?
答案 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);
});
});
然后你需要了解其他事情:
onclick=...
; path/to/myScript.php
。答案 1 :(得分:0)
我使用的解决方案是使用SessionStorage,因为此项目中的所有用户都必须升级他们的浏览器。实际上它绑定到Chrome,因此在这种情况下,这是将一些JSON-Strings传递给JS-Function的最佳方式。
有了这个,我可以在Check-Event上调用JS-Functions来获取/设置数据到存储,稍后可以轻松地决定如何进一步做。
感谢您的帮助:)