最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于chosen插件實(shí)現(xiàn)人員選擇樹(shù)搜索自動(dòng)篩選功能

 更新時(shí)間:2016年09月24日 14:14:06   作者:太羽  
這篇文章主要介紹了基于chosen插件實(shí)現(xiàn)人員選擇樹(shù)搜索自動(dòng)篩選功能的相關(guān)資料,需要的朋友可以參考下

要實(shí)現(xiàn)的功能截圖:

這里寫(xiě)圖片描述

要求:

1、點(diǎn)擊輸入框可以根據(jù)拼音自動(dòng)篩選數(shù)據(jù),并且標(biāo)記已經(jīng)選擇的數(shù)據(jù),沒(méi)有結(jié)果的時(shí)候提示,相應(yīng)的更新左邊樹(shù)狀態(tài)

2、勾選樹(shù)右側(cè)樹(shù)的復(fù)選框左側(cè)出現(xiàn)相應(yīng)的內(nèi)容

我用到的插件

vue+chosen+ztree

vue:組件化的MVVM庫(kù)

chosen:單選列表和多選列表增強(qiáng)

ztree:基于jquery的樹(shù)插件

分析

chosen插件已經(jīng)可以實(shí)現(xiàn)1中的大部分效果,我們只需要預(yù)先獲取數(shù)據(jù),實(shí)現(xiàn)左右兩側(cè)一 一對(duì)應(yīng),最后點(diǎn)擊發(fā)送獲取最終的數(shù)據(jù)集合ID

具體實(shí)現(xiàn)

chosen需要的html結(jié)構(gòu)

//只需要提供包含數(shù)據(jù)的select標(biāo)簽即可,該select默認(rèn)隱藏,chosen依據(jù)該數(shù)據(jù)構(gòu)建新的html結(jié)構(gòu)
<select name="dept" style="width:150px;" id="dept" class="dept_select" multiple="multiple"> 
<option value="部門1">部門1</option>
<option value="部門2">部門2</option>
<option value="部門3">部門3</option>
</select>
//chosen初始化
$(function(){
$('.dept_select').chosen({
no_results_text:'沒(méi)有結(jié)果',
allow_single_deselect:true
});
});

這樣要求1中的大部分效果就實(shí)現(xiàn)了,因?yàn)槲覀兊臄?shù)據(jù)是從后臺(tái)獲取的,因此我們需要從后臺(tái)獲取select的option的值,這里采用vue解析數(shù)據(jù),相應(yīng)的html結(jié)構(gòu)和js為:

//基于vue解析的html結(jié)構(gòu)
<select data-placeholder="選擇發(fā)件人" class="chosen-select form-control" tabindex="-1" multiple="multiple">
<template v-for='key in zmailTree'>
<option v-for='item in key.userList' value='{{item.id}}'>{{item.name}}</option>
</template>
</select>
//vue實(shí)例
var zmailForm=new Vue({
el:'#zmail-form',
ready:function(){
var that=this;
var getToken=$.cookie('dcValidate');
$.ajax({ 
type:'get',
async:false,
url:'后臺(tái)數(shù)據(jù)接口地址',
dataType: "json", 
success: function(msg){
that.$set('zmailTree', msg);
}
});
},
data:{
zmailTree:[]
}
});
//通過(guò)vue獲取后臺(tái)數(shù)據(jù),將json數(shù)據(jù)賦值給zmailTree這個(gè)數(shù)組,它是含有層級(jí)結(jié)構(gòu)的,我們不需要輸出層級(jí)結(jié)構(gòu),只需要輸出里面的人員就行了,但是實(shí)踐中發(fā)現(xiàn)一個(gè)人問(wèn)題,數(shù)據(jù)解析了,鼠標(biāo)點(diǎn)擊輸入框出現(xiàn)的下拉菜單中并沒(méi)有出現(xiàn)我們剛才解析出來(lái)的數(shù)據(jù),我們需要VUE的這個(gè)方法Vue.nextTick,延遲回調(diào)chosen初始化代碼:
//延遲初始化chosen
Vue.nextTick(function () {
$('#zmail-select').chosen({
no_results_text: '沒(méi)有找到該結(jié)果',// 當(dāng)檢索時(shí)沒(méi)有找到匹配項(xiàng)時(shí)顯示的提示文本
search_contains: true //從任意位置開(kāi)始檢索
});
});

然后出現(xiàn)了下面的效果:

這里寫(xiě)圖片描述 

接下來(lái)我們要做的就是選擇人員右邊相應(yīng)的人員選中,chosen提供了一個(gè)change方法,該方法當(dāng)選擇的值發(fā)生改變時(shí)觸發(fā),有這個(gè)方法我們就很容易根據(jù)select值的變化來(lái)觸發(fā)事件

$('select.chosen-select').on('change', function(){
// 用戶改變了選擇,快快處理
});

我們同樣要寫(xiě)到Vue.nextTick中

//延遲初始化chosen
Vue.nextTick(function () {
$('#zmail-select').chosen({
no_results_text: '沒(méi)有找到該結(jié)果',// 當(dāng)檢索時(shí)沒(méi)有找到匹配項(xiàng)時(shí)顯示的提示文本
search_contains: true //從任意位置開(kāi)始檢索
});
$('#zmail-select').on('change', function(){
//用戶改變了值之后作如下處理
var treeObj = $.fn.zTree.getZTreeObj("zmail-tree");
treeObj.expandAll(true);//展開(kāi)所有樹(shù)節(jié)點(diǎn)
treeObj.checkAllNodes(false);//清空所有樹(shù)節(jié)點(diǎn)
$("#zmail-select option:selected").each(function(i,obj){
var node = treeObj.getNodeByParam("id", obj.value, null);
treeObj.checkNode(node, true, true);
});
});
});
//輸入框的值只要發(fā)生了改變我們就獲取樹(shù)的目標(biāo)id,展開(kāi)所有子節(jié)點(diǎn),并且清空樹(shù)的所有選中狀態(tài),因?yàn)檩斎肟蛑械闹挡恢挂粋€(gè)因此我們要做一個(gè)循環(huán),使用ztree的方法getNodeByParam(根據(jù)給定的參數(shù)查找節(jié)點(diǎn))和checkNode(控制對(duì)應(yīng)節(jié)點(diǎn)的選中或者非選中操作)

到這選取輸入框數(shù)值讓右側(cè)樹(shù)種對(duì)應(yīng)的人員選中就實(shí)現(xiàn)了,下面來(lái)實(shí)現(xiàn)勾選右側(cè)樹(shù)中的人員來(lái)改變輸入框中的數(shù)據(jù)

//樹(shù)的html結(jié)構(gòu),不要忘記寫(xiě)ztree這個(gè)class,否則不顯示數(shù)據(jù)
<ul class="ztree" id="zmail-tree">
</ul>
//樹(shù)初始化代碼js
//人員樹(shù)基本設(shè)置
var zmailTreeSet={
view:{
dblClickExpand:false
},
async:{
enable:true,
type:'get',
url:'服務(wù)器數(shù)據(jù)地址',
},
data:{
simpleData:{
enable:true,
idKey:'id',
pIdKey:'parentId'
},
key:{
children:'userList'
}
},
check:{
enable:true,
chkboxType:{'Y':'s','N':'s'}
},
callback:{
onCheck:zmailCheck
}
};
function zmailCheck(){
//這里處理輸入框的數(shù)據(jù)
}
//初始化人員樹(shù)
$.fn.zTree.init($('#zmail-tree'),zmailTreeSet);

實(shí)現(xiàn)的思路:

(1)首先獲取點(diǎn)擊復(fù)選框的節(jié)點(diǎn),

var zmaObj = $.fn.zTree.getZTreeObj(treeId);//getZTreeObj插件方法,獲取目標(biāo)ID
var zmaNodes = zmaObj.getCheckedNodes(true);//getCheckedNodes獲取選中的所有節(jié)點(diǎn),此處為集合

(2)其次清空select中的選中狀態(tài),將其恢復(fù)到初始狀態(tài),

$("#zmail-select option").each(function(j,obj){
obj.selected='';
});

(3)根據(jù)勾選的節(jié)點(diǎn)數(shù)量循環(huán)使select中的相應(yīng)option選中,此處判斷的關(guān)鍵是數(shù)據(jù)id

for(var i = 0;i < zmaNodes.length; i++){
if(typeof(zmaNodes[i].userList) == 'undefined'){//如果該節(jié)點(diǎn)的userList屬性為空說(shuō)明不是父節(jié)點(diǎn),存取它的值,如果不為空則跳過(guò)
//不寫(xiě)判斷,直接使用勾選的樹(shù)的數(shù)據(jù)的ID來(lái)進(jìn)行選擇,使其屬性select改為selected
$("#zmail-select option[value="+zmaNodes[i].id+"]")[0].selected='selected';
}
}

(4)更新select option列表

//循環(huán)外更新select列表
$("#zmail-select").trigger('chosen:updated');

以上所述是小編給大家介紹的基于chosen插件實(shí)現(xiàn)人員選擇樹(shù)搜索自動(dòng)篩選功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • js 字符串轉(zhuǎn)換成數(shù)字的三種方法

    js 字符串轉(zhuǎn)換成數(shù)字的三種方法

    在js讀取文本框或者其它表單數(shù)據(jù)的時(shí)候獲得的值是字符串類型的,例如兩個(gè)文本框a和b,如果獲得a的value值為11,b的value值為9 ,那么a.value要小于b.value,因?yàn)樗麄兌际亲址问降?在網(wǎng)上找了一下js字符串轉(zhuǎn)數(shù)字的文章,這個(gè)比較全
    2013-03-03
  • JavaScript 布爾操作符解析  && || !

    JavaScript 布爾操作符解析 && || !

    在一門編程語(yǔ)言中,布爾操作符的重要性堪比相等操作符。如果沒(méi)有測(cè)試兩個(gè)值關(guān)系的能力,那么諸如if...else和循環(huán)之類的語(yǔ)句就不會(huì)有用武之地了。布爾操作符一共有3個(gè): 非、與、或
    2012-08-08
  • javascript中返回頂部按鈕的實(shí)現(xiàn)

    javascript中返回頂部按鈕的實(shí)現(xiàn)

    這篇文章主要介紹了使用javascript實(shí)現(xiàn)博客園頁(yè)面右下角返回頂部按鈕的思路及源碼,非常不錯(cuò),這里推薦給小伙伴們
    2015-05-05
  • 前端項(xiàng)目中報(bào)錯(cuò)Uncaught?(in?promise)的解決方法

    前端項(xiàng)目中報(bào)錯(cuò)Uncaught?(in?promise)的解決方法

    最近在做項(xiàng)目的時(shí)候控制臺(tái)報(bào)了一個(gè)錯(cuò)Uncaught(in promise) false,這篇文章主要給大家介紹了關(guān)于前端項(xiàng)目中報(bào)錯(cuò)Uncaught?(in?promise)的解決方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Js實(shí)現(xiàn)復(fù)選框的全選、全不選反選功能代碼實(shí)例

    Js實(shí)現(xiàn)復(fù)選框的全選、全不選反選功能代碼實(shí)例

    這篇文章主要介紹了Js實(shí)現(xiàn)復(fù)選框的全選、全不選和反選,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • webpack打包中path.resolve(__dirname, 'dist')的含義解析

    webpack打包中path.resolve(__dirname, 'dist')的含義解

    這篇文章主要介紹了webpack打包中path.resolve(__dirname, 'dist')的含義解析,path:path.resolve(__dirname, 'dist')就是在打包之后的文件夾上拼接了一個(gè)文件夾,在打包時(shí),直接生成,本文給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • TypeScript中Map對(duì)象使用及Map與字典的區(qū)別詳解

    TypeScript中Map對(duì)象使用及Map與字典的區(qū)別詳解

    Map對(duì)象主要的應(yīng)用場(chǎng)景在于數(shù)據(jù)重組和數(shù)據(jù)儲(chǔ)存,下面這篇文章主要給大家介紹了TypeScript中Map對(duì)象使用及Map與字典的區(qū)別的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 原生JS實(shí)現(xiàn)各種運(yùn)動(dòng)之復(fù)合運(yùn)動(dòng)

    原生JS實(shí)現(xiàn)各種運(yùn)動(dòng)之復(fù)合運(yùn)動(dòng)

    這篇文章主要為大家詳細(xì)介紹了原生JS實(shí)現(xiàn)各種運(yùn)動(dòng)之復(fù)合運(yùn)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • js原生代碼實(shí)現(xiàn)輪播圖的實(shí)例講解

    js原生代碼實(shí)現(xiàn)輪播圖的實(shí)例講解

    下面小編就為大家?guī)?lái)一篇js原生代碼實(shí)現(xiàn)輪播圖的實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • 一文詳解如何處理前端表單驗(yàn)證確保用戶輸入合法

    一文詳解如何處理前端表單驗(yàn)證確保用戶輸入合法

    這篇文章主要介紹了如何處理前端表單驗(yàn)證確保用戶輸入合法的相關(guān)資料,并分享了最佳實(shí)踐和常見(jiàn)坑點(diǎn),通過(guò)合理使用這些方法,可以構(gòu)建出健壯、友好的驗(yàn)證系統(tǒng),文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2025-03-03

最新評(píng)論

靖西县| 略阳县| 柳州市| 湟源县| 台东县| 罗田县| 霍城县| 扶沟县| 潼南县| 饶阳县| 会昌县| 丰镇市| 确山县| 雷山县| 澄城县| 石楼县| 响水县| 绥化市| 安庆市| 明溪县| 龙泉市| 金阳县| 宁陕县| 资中县| 景泰县| 巩留县| 广安市| 资阳市| 无棣县| 牡丹江市| 新宁县| 都江堰市| 永兴县| 长沙市| 清丰县| 定襄县| 康马县| 利津县| 凌源市| 富平县| 靖江市|