浏览代码

Fix #967: unselected column while column sorted display error.

zhixin 10 年之前
父节点
当前提交
f20358fbf6
共有 1 个文件被更改,包括 42 次插入42 次删除
  1. 42 42
      src/bootstrap-table.js

+ 42 - 42
src/bootstrap-table.js

@@ -550,8 +550,7 @@
     BootstrapTable.prototype.initHeader = function () {
         var that = this,
             visibleColumns = [],
-            html = [],
-            timeoutId = 0;
+            html = [];
 
         this.header = {
             fields: [],
@@ -581,19 +580,6 @@
                 unitWidth = 'px',
                 width = column.width;
 
-            if (!column.visible) {
-                // Fix #229. Default Sort order is wrong
-                // if data-visible="false" is set on the field referenced by data-sort-name.
-                if (column.field === that.options.sortName) {
-                    that.header.fields.push(column.field);
-                }
-                return;
-            }
-
-            if (that.options.cardView && (!column.cardVisible)) {
-                return;
-            }
-
             if (column.width !== undefined && (!that.options.cardView)) {
                 if (typeof column.width === 'string') {
                     if (column.width.indexOf('%') !== -1) {
@@ -610,7 +596,6 @@
             style = sprintf('vertical-align: %s; ', column.valign);
             style += sprintf('width: %s%s; ', column.checkbox || column.radio ? 36 : width, unitWidth);
 
-            visibleColumns.push(column);
             that.header.fields.push(column.field);
             that.header.styles.push(align + style);
             that.header.classes.push(class_);
@@ -622,6 +607,16 @@
             that.header.clickToSelects.push(column.clickToSelect);
             that.header.searchables.push(column.searchable);
 
+            if (!column.visible) {
+                return;
+            }
+
+            if (that.options.cardView && (!column.cardVisible)) {
+                return;
+            }
+
+            visibleColumns.push(column);
+
             html.push('<th',
                 column.checkbox || column.radio ?
                 sprintf(' class="bs-checkbox %s"', column['class'] || '') :
@@ -916,7 +911,8 @@
             $keepOpen.find('input').off('click').on('click', function () {
                 var $this = $(this);
 
-                that.toggleColumn(getFieldIndex(that.options.columns, $(this).data('field')), $this.prop('checked'), false);
+                that.toggleColumn(getFieldIndex(that.options.columns,
+                    $(this).data('field')), $this.prop('checked'), false);
                 that.trigger('column-switch', $(this).data('field'), $this.prop('checked'));
             });
         }
@@ -1325,6 +1321,10 @@
                     rowspan_ = '',
                     column = that.options.columns[getFieldIndex(that.options.columns, field)];
 
+                if (!column.visible) {
+                    return;
+                }
+
                 style = sprintf('style="%s"', csses.concat(that.header.styles[j]).join('; '));
 
                 value = calculateObjectValue(column,
@@ -1428,7 +1428,7 @@
         }
 
         // click to select by column
-        this.$body.find('> tr[data-index] > td').off('click').on('click', function () {
+        this.$body.find('> tr[data-index] > td').off('click dblclick').on('click dblclick', function (e) {
             var $td = $(this),
                 $tr = $td.parent(),
                 item = that.data[$tr.data('index')],
@@ -1437,27 +1437,16 @@
                 field = $headerCell.data('field'),
                 value = item[field];
 
-            that.trigger('click-cell', field, value, item, $td);
-            that.trigger('click-row', item, $tr);
+            that.trigger(e.type === 'click' ? 'click-cell' : 'dbl-click-cell', field, value, item, $td);
+            that.trigger(e.type === 'click' ? 'click-row' : 'dbl-click-row', item, $tr);
             // if click to select - then trigger the checkbox/radio click
-            if (that.options.clickToSelect) {
+            if (e.type === 'click' && that.options.clickToSelect) {
                 if (that.header.clickToSelects[$tr.children().index($(this))]) {
                     $tr.find(sprintf('[name="%s"]',
                         that.options.selectItemName))[0].click(); // #144: .trigger('click') bug
                 }
             }
         });
-        this.$body.find('> tr[data-index] > td').off('dblclick').on('dblclick', function () {
-            var $td = $(this),
-                $tr = $td.parent(),
-                item = that.data[$tr.data('index')],
-                cellIndex = $td[0].cellIndex,
-                $headerCell = that.$header.find('th:eq(' + cellIndex + ')'),
-                field = $headerCell.data('field'),
-                value = item[field];
-            that.trigger('dbl-click-cell', field, value, item, $td);
-            that.trigger('dbl-click-row', item, $tr);
-        });
 
         this.$body.find('> tr[data-index] > td > .detail-icon').off('click').on('click', function () {
             var $this = $(this),
@@ -1508,13 +1497,20 @@
             if (typeof events === 'string') {
                 events = calculateObjectValue(null, events);
             }
-            if (!that.options.cardView && that.options.detailView) {
-                i += 1;
-            }
+
+            var field = that.header.fields[i],
+                fieldIndex = -1;
+            that.$header.find('th').each(function (i) {
+                if (field === $(this).data('field')) {
+                    fieldIndex = i;
+                    return false;
+                }
+            });
+
             for (var key in events) {
                 that.$body.find('tr').each(function () {
                     var $tr = $(this),
-                        $td = $tr.find(that.options.cardView ? '.card-view' : 'td').eq(i),
+                        $td = $tr.find(that.options.cardView ? '.card-view' : 'td').eq(fieldIndex),
                         index = key.indexOf(' '),
                         name = key.substring(0, index),
                         el = key.substring(index + 1),
@@ -1523,7 +1519,7 @@
                     $td.find(el).off(name).on(name, function (e) {
                         var index = $tr.data('index'),
                             row = that.data[index],
-                            value = row[that.header.fields[i]];
+                            value = row[field];
 
                         func.apply(this, [e, value, row, index]);
                     });
@@ -2020,16 +2016,20 @@
 
     BootstrapTable.prototype.mergeCells = function (options) {
         var row = options.index,
-            col = $.inArray(options.field, this.header.fields),
+            col = -1,
             rowspan = options.rowspan || 1,
             colspan = options.colspan || 1,
             i, j,
             $tr = this.$body.find('tr'),
-            $td = $tr.eq(row).find('td').eq(col);
+            $td;
+
+        this.$header.find('th').each(function (i) {
+            if ($(this).data('field') === options.field) {
+                col = i;
+                return false;
+            }
+        });
 
-        if (!this.options.cardView && this.options.detailView) {
-            col += 1;
-        }
         $td = $tr.eq(row).find('td').eq(col);
 
         if (row < 0 || col < 0 || row >= this.data.length) {