2012-04-14 64 views
0

我希望我的Drupal中的按鈕能夠在javascript無法使用的情況下正常退化,方法是將用戶指向完整節點。當沒有可用的JavaScript時,在drupal中優雅地降級jquery。想法?

我在我的Drupal node-type-tpl.php的頭部有這個jquery javascript代碼;

Drupal.behaviors.infobutton = function(context) { 
    $("button").click(function() { 
    $('.more').hide(); 
    $('.more').eq($('button').index($(this))).show(); 
    }); 
    } 

這是在我的node-type-tpl.php中的表中的一行中的按鈕,

<button>More</button> 

這是表中的下一行,被css隱藏,直到我點擊我的按鈕;

<tr class="more"><td>some php content</td></tr> 

當前用戶在視圖中看到一個修剪下來的節點。此節點打開後可以在點擊按鈕時顯示更多內容。我想,爲了讓用戶定向到完整的節點,如果javascript被關閉。

任何想法我可以做到這一點?

回答

0

我認爲最簡單的方法是使用<a>標記代替<button>標記,然後在您的函數中調用e.preventDefault()。你可以創建這樣的鏈接:

<php print l('More', 'node/' . $node->nid, array('attributes' => array('class' => array('morelink'))); ?> 

注意的是,類格式是在Drupal 6和7的不同,請參閱 http://api.drupal.org/api/drupal/includes%21common.inc/function/l/7

然後是JavaScript的是這樣的:

Drupal.behaviors.morelink = function(context) { 
    $("a.morelink").click(function (e) { 
    e.preventDefault(); 
    $('.morelink').hide(); 
    $('.morelink').eq($('a.morelink').index($(this))).show(); 
    }); 
} 

如果你希望它是一個實際的按鈕控件,你應該使用一個實際的表單,因爲<button>元素本身不能在沒有Javascript的情況下重定向瀏覽器。可能看起來像

<form action="<?php print url('node/' . $node->nid); ?>"> 
    <input type="submit" class="more" value="More" /> 
</form> 

你仍然需要e.preventDefault()在這裏。然而,我並不真正贊成這一點,但鏈接方法是優雅降級的更常見方法。

最後,我會使用drupal_add_js()而不是直接在節點模板中包含您的Javascript,因此您可以利用自動緩存和壓縮功能。

+0

嗚呼!這工作。對代碼進行一些修改; Drupal.behaviors.morelink = function(context){(「a.morelink」)。click(function(e){e.preventDefault();) $('。more')。hide(); $('。more')。eq($('a.morelink')。index($(this))).show(); }); }'和'More' – Meggy 2012-04-14 11:48:44