; (function ($, window, document, undefined) { //对jquery扩展了一个FuzzySearch方法 $.fn.FuzzySearch = function (options) { //配置项 var settings = { inputID: '', title: '请选择', //输入框提示语 data: [], //选择项数组 searchBtn: '', //查询按钮ID handlerFun: '', //选择项改变后需要执行的方法 ajaxUrl: '', //异步获取数据时的请求地址 clearHandlerFun:'',//点击清空后执行的方法 }; if (options) { //将调用处的配置项覆盖到settings $.extend(settings, options); } /*********************动态生成相关元素标签*********************/ $.createElm = function (element, settings) { if ($("#" + settings.inputID).length > 0) { var inputStr = ''; $($("#" + settings.inputID)).parent().append(inputStr); var divStr = '
'; $($("#" + settings.inputID)).parent().parent().append(divStr); } else { alert("不存在模糊搜索隐藏域"); } }; /* *data:要遍历的数据,如渠道或者游戏 *inputID:隐藏域input的id */ /***************将查询过的渠道名显示到显示层的input上,并将id赋值给隐藏域的input*****************/ $.showQueryParam = function (element, settings) { if ($.trim($("#" + settings.inputID).val()).length != 0) { var hideID = $("#" + settings.inputID).val(); } //没办法获取到隐藏域的值时,显示层如果有值,创建清空符号,遍历数据,比对显示层的name,再将id赋值给隐藏域 // if ($.trim($("#" + settings.inputID).val()).length == 0) { // setTimeout(function () { // var gameName = $("#" + settings.inputID + "_show").val(); // if (gameName != "") { // if (settings.data !== "" || settings.data !== null) { // //遍历数据 // for (var key in settings.data) { // //遍历数据查找,如果展示层的游戏name与遍历到的某个数据的name一致 // if (settings.data[key].name == gameName) { // //将id赋值给隐藏层input // $("#" + settings.inputID).val(settings.data[key].id); // $.createClearCross(settings.inputID); // } // } // } else { // alert("数据为空"); // } // } // }, 100) // } if (settings.data !== "" || settings.data !== null) { //遍历数据 for (var key in settings.data) { //再次遍历数据查找,如果隐藏域的值与遍历到的某个数据的id一致 if (settings.data[key].id == hideID) { //将名字赋值给显示层input $("#" + settings.inputID + "_show").val(settings.data[key].name); $.createClearCross(settings.inputID,settings.clearHandlerFun); } } } else { alert("数据为空"); } }; /* *data:要遍历的数据,如渠道或者游戏 *inputID:隐藏域input的id */ /*****************输入的时候触发进行模糊搜索**********************/ $.inputChange = function (element, settings) { //点击空白处,隐藏容器,即下拉框 $("body").on("click", function () { $("#" + settings.inputID + "_selectBox").css({ "display": "none" }); }); //监听显示层input的每次的输入 $("#" + settings.inputID + "_show").on("input", function () { //获取显示层的值 var word = $("#" + settings.inputID + "_show").val(); var str = ""; if (settings.data !== "" || settings.data !== null) { //遍历全部数据 for (var key in settings.data) { if (word != "" && settings.data[key].name.match(word + ".*") != null) { str += '' + settings.data[key].name + ''; } } } //将查询到的数据渲染进容器中 $("#" + settings.inputID + "_selectBox").html(str).css({ "display": "block" }); }) }; /** * data:要遍历的数据,如渠道或者游戏 * inputID:隐藏域input的id ***/ $.fuzzyHandle = function (element, settings) { if (!settings.searchBtn) { return; } $("#" + settings.searchBtn).on("mouseover", function () { /**如果是直接复制渠道号进input#searchTxt输入框内的情况,没有去点击下拉出现的选项,就会出现没有对隐藏域input#channelID赋值的情况**/ if ($("#" + settings.inputID + "_show").val().length > 0) { for (var key in settings.data) { if (settings.data[key].name == $("#" + settings.inputID + "_show").val()) { $("#" + settings.inputID).val(settings.data[key].id); } } } //如果把搜索内容清空,那么隐藏域里的内容也赋空,重新查询 if ($("#" + settings.inputID + "_show").val().length == 0) { $("#" + settings.inputID).val(""); } }) }; //新增选项清空 $.createClearCross = function (inputID,Fun) { $("#" + inputID).parent().append('×'); $("#" + inputID).parent().on("click", ".cross", function () { $("#" + inputID + "_show").val(""); $("#" + inputID).val(""); if(Fun!=""){ eval(Fun+"()") } $(this).remove(); }) }; //异步获取数据时 if (settings.ajaxUrl != '' && settings.data.length == 0) { $.ajax({ type: "GET", url: settings.ajaxUrl, dataType: "json", success: function (res) { settings.data = res; //执行以下方法 $.createElm(this, settings); $.showQueryParam(this, settings); $.inputChange(this, settings); $.fuzzyHandle(this, settings); }, }); } else { //执行以下方法 $.createElm(this, settings); $.showQueryParam(this, settings); $.inputChange(this, settings); $.fuzzyHandle(this, settings); } } })(jQuery, window, document); //改变选择项 function FuzzySearchAdd(inputID, channelName, channelID, handlerFun,clearHandlerFun) { $("#" + inputID + "_show").val(channelName); //将渠道id赋值给隐藏的input,用这个隐藏的input提交 $("#" + inputID).val(channelID); //选项容器隐藏 $("#" + inputID + "_selectBox").css({ "display": "none" }); $("#" + inputID).parent().append('×'); $("#" + inputID).parent().on("click", ".cross", function () { $("#" + inputID + "_show").val(""); $("#" + inputID).val(""); if(clearHandlerFun!=""){ eval(clearHandlerFun+"()") } $(this).remove(); }) //游戏推荐管理用 if($("#" + inputID + "_show").parent().parent().siblings("input[type=hidden]").length>0){ //不为0,则已传过 if($("#" + inputID + "_show").parent().parent().siblings("input[type=hidden]").eq(0).val()!=0){ $("#" + inputID + "_show").parent().parent().siblings("input[type=hidden]").eq(1).val(2) }else{ //等于0,则是新增 $("#" + inputID + "_show").parent().parent().siblings("input[type=hidden]").eq(1).val(1) } } if (handlerFun !== "") { eval(handlerFun + "()"); } };