0

我正在使用 YII,并且我有一个按品牌过滤产品的复选框过滤器。

这是我的过滤器 HTML:

<dl class="brand-filter"> 
    <dd class="cat-text">  
        <input value="1" id="chb_1" class="brand-filter-chb" type="checkbox" name="brands[]">            
        <label for="chb_1" class="brand-filter-text" style=" display: inline-block;">Brand Name 1</label>      
    </dd>
    <dd class="cat-text">          
        <input value="2" id="chb_2" class="brand-filter-chb" type="checkbox" name="brands[]">            
        <label for="chb_2" class="brand-filter-text" style=" display: inline-block;">BRAND Name 2 </label>
    </dd>
    etc.
</dl>

当用户单击复选框时,jquery 会执行 YII fn.yiiListView.update。这类似于更新我正在过滤的数据的 ajax 调用。对控制器/动作进行 Ajax 调用(在我的例子中,控制器是产品,动作是列表),参数 $brands 被传递给控制器​​/动作。

这是我的过滤器 javascript (Jquery):

$('.brand-filter-chb').live('click', function(){        
    brands = $('#filter-form').serialize();     //brand names are serialized 
    $.fn.yiiListView.update(  //this updates product list by brand names
        'product-list',   //id of product list table
        {data: brands}   //serialized data send to controller/action by ajax call
    );    
});    

这允许按品牌过滤产品列表。使用检查品牌名称复选框并过滤列表。用户还可以检查多个品牌名称,一切正常。但是,如果没有 Javascript,它就无法工作。

我想知道在没有 javascript 的情况下允许相同或非常相似的用户体验的最佳解决方案是什么。例如,如果未启用 javascript,用户可以仅按一个品牌过滤产品列表也是可以接受的。

4

2 回答 2

1

我的建议是将您的过滤器 HTML 包含在表单中,并将表单的操作设置为您用于 AJAX 过滤器的相同操作。

如果你正在考虑 SEO,那么你的表单应该使用 get 方法提交,然后你可以使用 Yii 的请求对象:

Yii::app()->request->isPostRequest

确定正在处理的是 AJAX 请求还是非脚本版本。

您可以将表单过滤器的提交按钮包含在几个标签中。

至于在重新加载页面之前知道选择了哪些复选框,我不完全确定没有 javascript 是否可行。

于 2012-12-04T09:29:38.613 回答
0

如果你不想使用 javascript,你可以做的是创建一个

<noscript>Please enable javascript</noscript>

或在选中复选框后刷新页面并使用您的 php.ini 显示/隐藏元素。

于 2012-12-03T18:50:49.847 回答