再說combobox——onLoadSuccess用法執行個體

來源:互聯網
上載者:User

標籤:easyui   combobox   級聯   

不知道大家有沒有發現,在easyUI的combobox實現級聯這篇文章裡

在對combobox設定的時候,我寫了一個onLoadSuccess函數。

這個函數是在載入完遠端資料成功後被觸發,大致可以分為下面幾種情況:

1、若不在onBeforeLoad中限制,無論用何種方式初始化時必觸發一次,因為初始化時onBeforeLoad無論如何也都會觸發一次

2、若不在onBeforeLoad中限制,在使用remote方式載入資料時,每次發起請求到成功接收到資料後都會觸發一次


我之前寫的onLoadSuccess函數是為了在進入修改表單的頁面時,當主combobox載入資料並翻譯完畢後,觸發onLoadSuccess從而來載入並翻譯級聯combobox中的值。

因為級聯的combobox完全是被動的,當建立的時候我們是在onSelect這個函數中觸發的,而修改進來就需要依靠onLoadSuccess了。

下面看一下我之前的寫法:

     onLoadSuccess:function(){     var value = $(this).combobox('getValue');     if(value != ''){    <span style="white-space:pre"></span>$('[comboname=city]').combobox('reload', 'test/getCityListByProvince?id=' + $(this).combobox('getValue'));    }     }

這裡先判斷了主combobox中是否有值,若有值就去載入級聯combobox中的資料去翻譯。


有什麼問題嗎?

這對於editable:false的下拉選擇框來說好像沒什麼問題,因為value肯定只能是對應的value,而不會是其他亂七八糟的東西

但是如果像前一篇文章一樣是實現了combobox的自動提示功能的那似乎就有些問題了。


比如我們在輸入關鍵字時,每輸一個關鍵字,都會觸發onLoadSuccess,且此時value也有值,且就是你輸入的那個值(但是這裡個人感覺combobox的設計有點問題,因為輸入的值應該作為text才對,沒有select之前,value都應該為空白才對)

這樣一來,就會多出很多錯誤的請求,因為級聯的那個請求只需要在onSelect的時候觸發才對。


那麼如何改進呢?增加一個判斷條件吧

方案1:if($(this).combobox(‘getValue‘) == $(this).combobox(‘getText‘)){return}

看似可行,但實際上發現輸入速度過快時,兩者的值會不一樣!原因也沒有深究,放棄之

方案2:由於我這裡用到的value都是數字,所以可以用Regex判斷  

if(/^\d+$/.test(value)),這種方案暫時是可行的,但是也不完美,當使用者輸入數字時也會去觸發關鍵字搜尋,所以也得不到什麼結果。

方案3:可以利用onBeforeLoad來判斷

    onBeforeLoad: function(param){          if(param == null || param.q == null || param.q.replace(/ /g, '') == ''){              var value = $(this).combobox('getValue');              if(value){// 這裡可以判斷為修改,在這去載入級聯combobox中的資料                param.id = value;                  return true;              }              return false;          }      } 
方案2和方案3用哪種其實都可以達到目的~

再說combobox——onLoadSuccess用法執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.