2015-01-06 178 views
1

我玩弄智者和jQuery ...通過點擊複選框

其實我有一點啤酒項目,我想提高我的源更好HANDELING啓動一個智者的功能。

現在我所擁有的是帶有一些內容的HTML頁面(.tpl)。在一個行我有一個複選框,如:

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

而且因爲我要調用一個js功能,並通過JSON傳遞一些數據我有一個排在這個頁面看起來像:

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

實際上只是創建一個包含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} 

被稱爲像

{presets data="checkstatus"} 

但這裏的問題是,我不知道如何啓動一個複選框動作此功能...

五月有一個其他的方式來做到這一點什麼即時試圖做...

所以主要的問題是:

是否有可能激發一個Smarty函數複選框事件?

有沒有什麼辦法在模板上重新創建JSON字符串並將其傳遞給函數?

回答

2

您的JavaScript代碼不知道如何生成HTML,無論是從PHP/Smarty或任何其他方式。

你可以做什麼,是讓以獲得新生成的HTML AJAX調用到您的服務器,並注入它,無論你想:

$('.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 [eg onclick=...;
  • 使用合適的路由系統,而不是純path/to/myScript.php
+0

Thx for this hint。其實我不需要學習這個。就像我說這是一個大項目,99%沒有onClick。元素有類,它們被綁定到clickevents。但在某些情況下(非常少見)需要這種類型的代碼,否則處理一件簡單的事情將會花費很多工作量。而且比其他一些客戶可能遇到一些問題:)注入代碼實際上並不是我想要的。我會使用[sessionstorage](https://code.google.com/p/sessionstorage/) – Dwza

0

我使用的解決方案是使用SessionStorage,因爲這個項目中的所有用戶都必須升級他們的瀏覽器。實際上,它綁定到Chrome,所以在這種情況下,這是將一些JSON字符串傳遞給JS函數的最佳方式。

有了這個,我可以在Check-Event上調用JS-Functions,將數據獲取/設置到Storage中,稍後可以輕鬆地決定進一步做什麼。

感謝您的幫助:)