2015-01-06 2 views
1

Я играл с Smarty и JQuery ...Запуск Smarty функции, нажав флажок

На самом деле у меня есть проект немного лагера, и я хочу, чтобы улучшить свой источник для лучшего handeling.

Теперь у меня есть HTML-страница (.tpl) с некоторым контентом. В одной строке у меня есть флажок, как:

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

И потому что я хочу, чтобы вызвать JS-функцию и передать некоторые данные с помощью JSON У меня есть строка на этой странице, которая выглядит как:

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

что фактически просто создает Smarty-Variable, содержащую JSON-String.

На моем 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"} 

, но проблема здесь, я не знаю, как запустить эту функцию на CheckBox действия ...

мая есть другой способ сделать это, что им пытаются сделать ...

Поэтому основными вопросами являются:

Есть ли возможность использовать функцию Smarty в checkbox-event?

Есть ли способ воссоздать JSON-String на шаблоне и передать его функции?

ответ

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); 

    }); 

}); 

Затем вам нужно узнать, среди других вещи:

  • не вписывается inline js [eg onclick=...;
  • с использованием надлежащей системы маршрутизации, а не простой path/to/myScript.php.
+0

Thx для этого намека. На самом деле мне не нужно это изучать. Как я сказал, это немного большой проект, а 99% нет onClick. Элементы имеют классы, и они привязываются к clickevents. Но в некоторых случаях (очень редко) необходим такой тип кода, потому что в противном случае было бы очень сложно справиться с простой задачей. И чем некоторые другие клиенты могут столкнуться с некоторыми проблемами :) И внедрение кода на самом деле не то, что я хочу. Я буду использовать [sessionstorage] (https://code.google.com/p/sessionstorage/) – Dwza

0

Решение, которое я использую, использует SessionStorage, поскольку все пользователи в этом проекте должны обновить их браузер в любом случае. И на самом деле его привязали к Chrome, поэтому лучший способ передачи некоторых JSON-строк в JS-Function в этом случае.

С этим я могу вызвать JS-функции в Check-Event, который получает/устанавливает данные в Storage, а позже легко может решить, что делать дальше.

Спасибо за помощь :)

Смежные вопросы