iT邦幫忙

0

tablesorter在條件下無法運作

  • 分享至 

  • xImage

各位大大好
小弟目前碰到一個問題
就是當我想在某種條件達成下 才讓tablesorter能被啟用
像是有兩個radio button
我希望在B被勾選時 才能用tablesorter
可是我把它寫在條件中卻完全沒辦法使用了
我改成用function呼叫也是一樣結果
如果我直接寫在.ready中是可以排序的
只是就達不到我要的效果

html

<input type="radio" name="show_type" id="btn1" value="A">A
<input type="radio" name="show_type" id="btn2" value="B">B

Jquery

$(document).ready(function(){
    function resortTable(){
        $('#table_sts').tablesorter({
            ignoreCase: false,
            sortInitialOrder: 'desc',
            headers: {
                0: {sorter: false}
            },
        })
    }
    
    $('input[name=show_type]').change(function() {
            //console.log($(this).val());
            if($(this).val() == "B")
            {
                resortTable();
            }
    });
})

不知道是哪裡出了問題
謝謝各位大大

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
listennn08
iT邦高手 5 級 ‧ 2020-02-10 13:52:27
最佳解答

可是我把它寫在條件中卻完全沒辦法使用了

沒辦法使用是連排序都沒辦法使用嗎

我希望在B被勾選時 才能用tablesorter

// 如果只是希望B被選取才排序
// 那這裡不是 B 的時候應該要 reset table
$('input[name=show_type]').change(function() {
    //console.log($(this).val());
    if($(this).val() == "B") {
        resortTable();
    } else {
        $("#table_sts").tablesorter({
            headers: {
                0: {sorter: false},
                1: {sorter: false},
                ...
                n: {sorter: false},
            },
        });
    }
});
看更多先前的回應...收起先前的回應...
st474ddr iT邦新手 2 級 ‧ 2020-02-10 14:20:12 檢舉

沒辦法使用是連排序都沒辦法使用嗎

是的

所以大大您的方法
也沒辦法達成

不知道是不是tablesorter
只能在.ready的時候使用
或著在條件式中要用其他方法觸發

demo
你可以先在 ready 的時候先 initial 然後 用 trigger 去做你想做的排序
header 就全部設 false
因為我測試 沒辦法 false true改來改去

st474ddr iT邦新手 2 級 ‧ 2020-02-10 15:32:59 檢舉

用 trigger 去做你想做的排序

大大不太了解這什麼意思
我要做的就是 radio value=A
tablesorter disable
radio value = B
tablesorer enable

大大您說的好像是已經決定好如何排序了?

我目前有找到原作者後來更新的方法
https://mottie.github.io/tablesorter/docs/example-widget-toggle-tablesorter.html
但是我掛上去還是有問題(沒辦法disable)

我試也沒辦法
不過我想你可以用最笨的方法
在 th 加 class sorter-false

st474ddr iT邦新手 2 級 ‧ 2020-02-10 16:55:57 檢舉

在 th 加 class sorter-false

哈哈 大大被您說中了
我目前確實是用這種方法配合removeclass達成
不過我還是很好奇 原本為什麼不行

我看了一下他在 jsFiddle 的 demo 也沒有官網那種效果

st474ddr iT邦新手 2 級 ‧ 2020-02-11 09:02:52 檢舉

我看了一下他在 jsFiddle 的 demo 也沒有官網那種效果

這是真的 可能還要引入一些檔

st474ddr iT邦新手 2 級 ‧ 2020-02-11 10:12:05 檢舉

我詢問了作者
他也給了我答覆
主要原因 是因為我這樣寫僅僅是初始化tablesorter
一但初始化後 之後的指令便會忽略
所以如果要讓他失效 必須要destroy

所以如果要讓他失效 必須要destroy

我昨天也有測 destroy 而且跟作者寫的是差不多的
不過我昨天測怎麼不行剛剛測可以了 XD

0
咖咖拉
iT邦好手 1 級 ‧ 2020-02-10 11:38:43

看錯 自刪

st474ddr iT邦新手 2 級 ‧ 2020-02-10 11:53:48 檢舉

哈哈 正想回您

咖咖拉 iT邦好手 1 級 ‧ 2020-02-10 13:57:08 檢舉

剛剛喵了一眼就直接回了
後來想想好像不對/images/emoticon/emoticon13.gif

0
舜~
iT邦高手 1 級 ‧ 2020-02-10 11:45:17

您的 resortTable 方法結尾少一個'}'

$(function(){

    function resortTable(){
        $('#table_sts').tablesorter({
            ignoreCase: false,
            sortInitialOrder: 'desc',
            headers: {
                0: {sorter: false}
            }
        });
    }

    $('input[name=show_type]').change(function() {

            console.log($(this).val());
            if($(this).val() == "B")
            {
                resortTable();
            }
    });
});
看更多先前的回應...收起先前的回應...
st474ddr iT邦新手 2 級 ‧ 2020-02-10 11:54:32 檢舉

抱歉 我沒複製到
我程式中是有的

舜~ iT邦高手 1 級 ‧ 2020-02-10 11:55:47 檢舉

那您的js前後是否有用 $(function(){ ...} ); 包起來??

舜~ iT邦高手 1 級 ‧ 2020-02-10 11:56:21 檢舉

備註:上面那串的意思是整個網頁都載入後才執行
用$(document).ready(function(){...});也可以

舜~ iT邦高手 1 級 ‧ 2020-02-10 11:58:22 檢舉
st474ddr iT邦新手 2 級 ‧ 2020-02-10 12:01:15 檢舉

那您的js前後是否有用 $(function(){ ...} ); 包起來??

有的 大大我更改過問題內容中的code了

我要發表回答

立即登入回答