浏览代码

fix/4684 (#4848)

* added support for filter-control using fixed-header

* use the existing variable
Dustin Utecht 5 年之前
父节点
当前提交
51c2c25b1a

+ 9 - 0
src/extensions/filter-control/bootstrap-table-filter-control.js

@@ -405,6 +405,15 @@ const UtilsFilterControl = {
           return
         }
 
+        const $select = $(currentTarget)
+        const value = $select.val()
+        if ($.trim(value)) {
+          $select.find('option[selected]').removeAttr('selected')
+          $select.find('option[value="' + value + '"]').attr('selected', true)
+        } else {
+          $select.find('option[selected]').removeAttr('selected')
+        }
+
         clearTimeout(currentTarget.timeoutId || 0)
         currentTarget.timeoutId = setTimeout(() => {
           that.onColumnSearch({currentTarget, keyCode})

+ 27 - 0
src/extensions/sticky-header/bootstrap-table-sticky-header.js

@@ -45,6 +45,11 @@ $.BootstrapTable = class extends $.BootstrapTable {
     this.$tableBody.off('scroll').on('scroll', () => this.matchPositionX())
   }
 
+  onColumnSearch ({currentTarget, keyCode}) {
+    super.onColumnSearch({currentTarget, keyCode})
+    this.renderStickyHeader()
+  }
+
   resetView (...args) {
     super.resetView(...args)
 
@@ -53,6 +58,28 @@ $.BootstrapTable = class extends $.BootstrapTable {
   }
 
   renderStickyHeader () {
+    const that = this
+    this.$stickyHeader = this.$header.clone(true, true)
+
+    if (this.options.filterControl) {
+      $(this.$stickyHeader).off('keyup change mouseup').on('keyup change mouse', function (e) {
+        const $target = $(e.target)
+        const value = $target.val()
+        const field = $target.parents('th').data('field')
+        const $coreTh = that.$header.find('th[data-field="' + field + '"]')
+
+        if ($target.is('input')) {
+          $coreTh.find('input').val(value)
+        } else if ($target.is('select')) {
+          const $select = $coreTh.find('select')
+          $select.find('option[selected]').removeAttr('selected')
+          $select.find('option[value="' + value + '"]').attr('selected', true)
+        }
+
+        that.triggerSearch()
+      })
+    }
+
     const top = $(window).scrollTop()
     // top anchor scroll position, minus header height
     const start = this.$stickyBegin.offset().top - this.options.stickyHeaderOffsetY