Opencart Filters添加onclick事件以替换提交按钮

时间:2013-10-27 16:51:00

标签: javascript php jquery html opencart

我想在Opencart过滤器中添加一个onclick事件来替换隐藏在页面外的提交按钮。我假设这应该用javascript / jquery完成,但实现有点超出我的意思,可以你帮忙吗?

PHP:

<div class="box">
 <div class="box-heading"><?php echo $heading_title; ?></div>
 <div class="box-content">
  <ul class="box-filter">
   <?php foreach ($filter_groups as $filter_group) { ?>
   <li><span id="filter-group<?php echo $filter_group['filter_group_id']; ?>"><?php echo $filter_group['name']; ?></span>
    <ul>
     <?php foreach ($filter_group['filter'] as $filter) { ?>
     <?php if (in_array($filter['filter_id'], $filter_category)) { ?>
     <li>
      <input type="checkbox" value="<?php echo $filter['filter_id']; ?>" class="click_checkbox_manufacturers-filter" id="filter<?php echo $filter['filter_id']; ?>" checked="checked" />
      <label for="filter<?php echo $filter['filter_id']; ?>"><?php echo $filter['name']; ?></label>
     </li>
     <?php } else { ?>
     <li>
      <input type="checkbox" value="<?php echo $filter['filter_id']; ?>" class="click_checkbox_manufacturers-filter" id="filter<?php echo $filter['filter_id']; ?>" />
      <label for="filter<?php echo $filter['filter_id']; ?>"><?php echo $filter['name']; ?></label>
     </li>
     <?php } ?>
     <?php } ?>
    </ul>
   </li>
   <?php } ?>
  </ul>
  <a id="button-filter" class="button"><?php echo $button_filter; ?></a>
 </div>
</div>

HTML OUTPUT:

<div class="box">
 <div class="box-heading">Refine Search</div>
 <div class="box-content">
  <ul class="box-filter">
   <li><span id="filter-group2">Colour</span>
   <ul>
    <li>
     <input type="checkbox" value="33" class="click_checkbox_manufacturers-filter" id="filter33">
     <label for="filter33">Black</label>
    </li>
    <li>
     <input type="checkbox" value="35" class="click_checkbox_manufacturers-filter" id="filter35">
     <label for="filter35">Blue</label>
    </li>
    <li><span id="filter-group4">Scent Name</span>
    <ul>
     <li>
      <input type="checkbox" value="64" class="click_checkbox_manufacturers-filter" id="filter64">
      <label for="filter64">Almond</label>
     </li>
     <li>
      <input type="checkbox" value="65" class="click_checkbox_manufacturers-filter" id="filter65">
      <label for="filter65">Coconut</label>
     </li>
    </ul>
   </li>
  </ul>
  <a id="button-filter" class="button">Refine Search</a>
 </div>
</div>

的JavaScript

<script type="text/javascript">
$('#button-filter').bind('click', function() {
    filter = [];

    $('.box-filter input[type=\'checkbox\']:checked').each(function(element) {
        filter.push(this.value);
    });

    location = '<?php echo $action; ?>&filter=' + filter.join(',');
});
//--></script> 

2 个答案:

答案 0 :(得分:4)

您可以执行以下操作(而不是当前脚本):

<script type="text/javascript">
$(document).ready(function() {
    // hide the "submit" button
    $('#button-filter').hide();

    // bind onChange event to the checkboxes
    $('.click_checkbox_manufacturers-filter').live('change', function() {
        filter = [];

        $('.box-filter input[type=\'checkbox\']:checked').each(function(element) {
            filter.push(this.value);
        });

        window.location = '<?php echo $action; ?>&filter=' + filter.join(',');
    });
});
//--></script>

以下是同一JS代码的link to my JsFiddle,令人惊讶的是正常工作。唯一的问题可能是重定向...我编辑了上面的重定向代码,所以它应该也可以。

答案 1 :(得分:1)

对于版本2,更改filter.tpl文件中的JavaScript(从目录/ view / theme / default / template / extension / module / filter.tpl - 如果需要,更改&#39;默认&#39;到您的主题名称)到这个

<script type="text/javascript">
     $(document).ready(function() {
        $('#button-filter').hide();

        $('input[name^=\'filter\']').on('change', function() {
           filter = [];

            $('input[name^=\'filter\']:checked').each(function(element) {
               filter.push(this.value);
        });

        location = '<?php echo $action; ?>&filter=' + filter.join(',');
     });
});
</script>

在OC 2.3.0.2中测试。