打印来自页面onclick功能的结果?

时间:2009-12-10 18:11:42

标签: php ajax database filter

老实说,我甚至不确定最好的解决方法,但实质上,我在一个包含$type参数的包含文件中有一个函数,然后将从我的数据库中检索/打印结果传递给它的$ type ...我想要做的是在页面上有一系列链接,当你点击某个链接时,将运行该功能并相应地显示结果...

因此,在页面的初始加载时,有一个表格可以显示所有内容(我正在极大地简化表格)。

<table>
<tr><th>Item</th><th>Type</th></tr>
<tr><td>Milk</td><td>Dairy</td></tr>
<tr><td>Yogurt</td><td>Dairy</td></tr>
<tr><td>Chicken</td><td>Meat</td></tr>
<tr><td>Zucchini</td><td>Vegetable</td></tr>
<tr><td>Cucumber</td><td>Vegetable</td></tr>
</table>

然后,在侧边栏中,我有一系列链接:

<a href="#">Dairy</a>
<a href="#">Meat</a>
<a href="#">Vegetable</a>

我想根据点击的链接过滤初始表(以及来回等),这样如果用户点击“蔬菜”,我的包含文件中的函数将运行并过滤表只显示“蔬菜”类型...

3 个答案:

答案 0 :(得分:2)

首先想到的是将一个类属性添加到&lt; tr&gt;标签和id属于&lt; a&gt;标签,以便您可以轻松过滤:

<tr class="dairy"><td>Milk</td><td>Dairy</td></tr>
<tr class="meat"><td>Chicken</td><td>Meat</td></tr>

<a href="#" id="dairy">Dairy</a>
<a href="#" id="meat">Meat</a>

然后在你的JavaScript中(我在这里使用jQuery):

$('a').click(function(evt){
    var myId = $(this).attr('id');

    $('tr').each(function(idx, el){
        if ($(el).hasClass(myId))
        {
            $(el).show();
        }
        else
        {
            $(el).hide();
        }
    });
});

这样做的另一个好处是可以让您无需更改代码即可本地化文本。

答案 1 :(得分:1)

好的,我创造了一个正确的答案。你可以像达雷尔提出的那样去做。这只是分页事件的一个扩展,以避免cookie:

$('a').click(function(evt){
    var myId = $(this).attr('id');


    // append a idndicator to the current url
    var location = "" + document.location + "";
    location = location.split('#',1);
    document.location = location + '#' + $(this).attr('id');


    //append to next and previous links
    $('#nextlink').attr({
        'href': $('#nextlink').attr('href') + '#' + $(this).attr('id')
    });
    $('#previouslink').attr({
        'href': $('#previouslink').attr('href') + '#' + $(this).attr('id')
    });

    $('tr').each(function(idx, el){
        if ($(el).hasClass(myId))
        {
            $(el).show();
        }
        else
        {
            $(el).hide();
        }
    });
});

页面加载后执行的一些代码:

var filter = window.location.hash ? '[id=' + window.location.hash.substring(1, window.location.hash.length) + ']' : false;
if(filter)
    $('a').filter(filter).click();

这模拟/执行具有特定ID的链接上的页面加载点击。

但一般来说,如果你有一个大型数据库,你应该在后端用SQL直接过滤它。这将使显示的表更加一致。例如,如果第1页可能只有3行“乳制品”,并且在第2页上有10行“乳制品”。

答案 2 :(得分:0)

如果您在前面打印整个表格,则无需返回服务器,您可以简单地隐藏给定类型的所有行。例如,使用jQuery:

    $('#sidebar a').click(function(){
      // grab the text content of the a tag conver to lowercase
      var type = $(this).text().toLowerCase();

      /* filter all the td's in the table looking for our specified type then hid the 
       * row that they are in
       */
      $('#my_data_table td').contents().filter(function(){
         return this.nodeType == 3 && this.toLowerCase() == type;
      }).parent('tr').hide();

      return false;
    });

实际上,虽然建议abotu在TR中添加一个类更好,因为如果因为某些原因而没有预期的内容,过滤文本内容会变得棘手(因此我转换为所有小写以帮助解决这个问题)。