window.console = window.console || { log: function () { } }; var CITYSEARCH = function (options) { var defaluts = { oInput: '.city-search' } $(options && options.oInput || defaluts.oInput).each(function () { //防止重复初始化 if ($(this).data("init")) { return; } new CitySearch($(this), options, defaluts); $(this).data("init", true); }) } // 构造函数 var CitySearch = function ($target, options, defaluts) { var _this = this; // 初始化 _this.init($target, options, defaluts); } // 初始化 CitySearch.prototype.init = function ($target, options, defaluts) { //Begin由于后台接口没去掉,默认一个国家 if ($("#gLanguageCurrent").val() == "zh" || $("#gLanguageCurrent").val() == "cn") { $("#Country").val("107"); $("#txtCountry").val("北京市"); } else { $("#Country").val("255"); $("#txtCountry").val("United States"); } //End由于后台接口没去掉,默认一个国家 var _this = this; // 合并参数 _this.opts = $.extend({}, defaluts, options); // 外部对象 _this.oInput = $target; // 生成dom结构(用于装数据的盒子) _this.generateBox(); // 手动生成数据 _this.oData = []; //for(i = 0; i < 3; i ++){ // _this.oData.push({ // "data-id":"012,14,254", // "data-name":"深圳市, 广东省, 中国", // "data-value":"深圳市, 广东省, 中国" // },{ // "data-id":"012,14,254", // "data-name":"广州市, 广东省, 中国", // "data-value":"广州市, 广东省, 中国" // },{ // "data-id":"012,14,254", // "data-name":"东莞市, 广东省, 中国", // "data-value":"东莞市, 广东省, 中国" // }) //} // 事件 _this.oEvent(); } // 生成dom结构(用于装数据的盒子) CitySearch.prototype.generateBox = function () { var _this = this; var boxObj = '
'; _this.oInput.after(boxObj); _this.oKeyCon = _this.oInput.nextAll('.city-con'); // 添加样式 _this.style(); } // 添加样式 CitySearch.prototype.style = function () { var w = $(window).width(); var _this = this; var style = '
' + '' + '
'; _this.oInput.after(style); } // 事件 CitySearch.prototype.oEvent = function () { var _this = this; // 光标进入的时候提示文字 _this.oInput.on('focus', function () { var aData = []; //if ($(this).val() == '' || $(this).val().length < 3) { // aData.push('' + $("#HidGetPricingCpc").val() + ''); //} if ($("#gLanguageCurrent").val() == "zh" && $(this).val().length <= 0) { aData.push('' + ($("#HidGetPricingCpc").val() == "GetPricingCpc" ? "请输入1个或更多字符." : $("#HidGetPricingCpc").val()) + ''); } else if ($("#gLanguageCurrent").val() != "zh" && $(this).val().length < 3) { aData.push('' + ($("#HidGetPricingCpc").val() == "GetPricingCpc" ? "Please enter 3 or more characters." : $("#HidGetPricingCpc").val()) + ''); } if (_this.oKeyCon.attr('data-num') == 1 || aData.length > 0) { _this.oKeyCon.css('display', 'block'); if (_this.oKeyCon.find('a').length == 0) { _this.oKeyCon.html(aData.slice(0, 20).join("")) _this.oInput.trigger("change-content"); } } }) //输入字母选择城市或者文字选择城市 var trimer = ''; var oldValue; var timer2; _this.oInput.on('input', function(e) { clearTimeout(timer2) var This = $(this); timer2 = setTimeout(function() { lazyInput(This); }, 330) }) function lazyInput(This) { //切不是删除键 // if(e.key.length>1 && e.keyCode!=8){ // return; // } // 如果上一次循环没有走完就不进入再次循环 //下拉菜单上下键切换 if (_this.oInput.data("tabfocusselect")) { clearTimeout(trimer); _this.oInput.data("tabfocusselect", false) return; } if (oldValue == This.val()) { return; } oldValue = This.val() clearTimeout(trimer); trimer = setTimeout(function() { if (_this.oInput.data("tabfocusselect")) { _this.oInput.data("tabfocusselect", false) return; } var oInputValue = This.val(), aData = []; if ($("#gLanguageCurrent").val() == "zh" && oInputValue.length <= 0) { aData.push('' + ($("#HidGetPricingCpc").val() == "GetPricingCpc" ? "请输入1个或更多字符." : $("#HidGetPricingCpc").val()) + ''); _this.oKeyCon.html(aData.slice(0, 20).join("")) _this.oInput.trigger("change-content");; } else if ($("#gLanguageCurrent").val() != "zh" && oInputValue.length < 3) { aData.push('' + ($("#HidGetPricingCpc").val() == "GetPricingCpc" ? "Please enter 3 or more characters." : $("#HidGetPricingCpc").val()) + ''); _this.oKeyCon.html(aData.slice(0, 20).join("")) _this.oInput.trigger("change-content");; } else { _this.oKeyCon.html('
') loadCityData(oInputValue, function(data) { if (data != null && data.length > 0) { if ($("#gLanguageCurrent").val() == 'zh' || $("#gLanguageCurrent").val() == 'cn') { for (k = 0; k < data.length; k++) { var vDNames = ((data[k].name != undefined && data[k].name != '' && data[k].name.length > 0) ? data[k].name.split(';') : null); var vCity = ((vDNames != null && vDNames.length >= 2) ? vDNames[0] : ""); if (isInArray(vCity)) { aData.push("" + vCity + ""); } else { var vPri = ((vDNames != null && vDNames.length >= 2) ? vDNames[1] : ""); aData.push("" + vCity + "," + vPri + ""); } } } else { for (k = 0; k < data.length; k++) { aData.push("" + data[k].name + ""); } } // 光标开关 _this.oKeyCon.attr('data-num', 1); } else { aData.push('' + $("#HidGetPricingCpcMsg").val() + ''); // 光标开关 _this.oKeyCon.attr('data-num', 0); } _this.oKeyCon.html(aData.slice(0, 189).join("")) _this.oInput.trigger("change-content");; }) } // 重新绑定demo元素 _this.oBtna = _this.oKeyCon.find('a'); _this.oKeyCon.css('display', 'block'); // 分割字符串( 有 空格 , ,) // oInputValueNum = oInputValue.trim().split(/[,,\s]+/g); // if (oInputValue == '') { // _this.oKeyCon.css('display', 'none'); // _this.oKeyCon.html(' '); // }; // var beforeData = curData(oInputValueNum,_this.oData); // 递归循环数据函数 // function curData (keywords,filterData){ // var ret = []; // if(keywords.length==0){ // return filterData; // } // var pop = keywords.shift().toLowerCase(); // for(var i = 0; i < filterData.length; i ++){ // var dataqp = filterData[i]['data-name'].toLowerCase(); // var patt = new RegExp(pop).test(dataqp); // if(patt){ // ret.push(filterData[i]); // } // } // ret = curData(keywords,ret); // return ret; // } }, 100); }; /** * 加载城市数据 */ function loadCityData(oInputValue, success) { var ajaxUrl = location.protocol + "//" + location.host + "/en/Service/CollectUser" var params = { "type": "getCountryProvinceCity", "keys": oInputValue, "languages": $("#gLanguageCurrent").val().toLowerCase(), "count": 50 } $.ajax({ type: "POST", url: ajaxUrl, data: params, cache: false, // async: false, success: function (data) { success(data); }, error: function (XMLHttpRequest, textStatus, errorThrown) { var ve = ""; } }) } // 第一次加载数据 if ($("#gLanguageCurrent").val() == "zh") { loadCityData("深圳", function () { }) } else { loadCityData("abc", function () { }) } /** * 使用循环的方式判断一个元素是否存在于一个数组中 * @param {Object} vCitys 数组 * @param {Object} value 元素值 */ function isInArray(value) { var vCitys = ["北京市", "上海市", "天津市", "重庆市"]; for (var i = 0; i < vCitys.length; i++) { if (value === vCitys[i]) { return true; } } return false; } //点击城市 _this.oKeyCon.on('mousedown', 'a', function (e) { e.stopPropagation(); _this.oInputValue = ''; _this.offVerification = false; var thisHTML = $(this).html(); var thisName = $(this).attr('data-name'); var thisID = $(this).attr('data-id'); var showFlag = $(this).data("keyupselect") $(this).data("keyupselect",false) _this.oInput.val(''); _this.oInput.val(thisHTML); _this.oInput.attr('data-name', thisName); _this.oInput.attr('data-id', thisID); searchVerification(_this.oInput,showFlag); }) //输入文字不匹配的提示 _this.oInput.on('blur', function () { searchVerification($(this)); }); // 验证函数 function searchVerification(obj,showFlag) { _this.offVerification = false; var dataqp; _this.oInputValue = obj.val().toLowerCase(); var oreqiuredText = obj.attr("data-error"); var match = false; _this.oKeyConA = _this.oKeyCon.find('a'); if (_this.oInputValue != '') { for (var i = 0; i < _this.oKeyConA.length; i++) { dataqp = _this.oKeyConA.eq(i).html().toLowerCase(); //.attr('data-name').toLowerCase(); if (_this.oInputValue == dataqp) { _this.offVerification = true; } }; } if (!_this.offVerification) { _this.oInput.addClass('red'); _this.oInput.nextAll('.input-error').text(_this.oInput.attr('countryerr')).addClass('error'); _this.oInput.parents('.J-validItem').removeClass('validSuccess').addClass('validError'); clearCpcVal(); } else { _this.oInput.removeClass('red'); _this.oInput.nextAll('.input-error').removeClass('error'); _this.oInput.parents('.J-validItem').removeClass('validError').addClass('validSuccess'); setCpcVal(_this) } if(!showFlag){ _this.oKeyCon.css('display', 'none'); } return _this.offVerification; } //提供给外部调用 _this.oInput.data("valid-func", searchVerification) function setCpcVal(_this) { var vDId = _this.oInput.attr("data-id"); var vDName = _this.oInput.attr("data-name"); var vDtIds = ((vDId != undefined && vDId != '' && vDId.length > 0) ? vDId.split(';') : null); var vDNames = ((vDName != undefined && vDName != '' && vDName.length > 0) ? vDName.split(';') : null); $("#txtidataCityId").val(((vDtIds != null && vDtIds.length >= 3) ? vDtIds[0] : "")); $("#txtidataProvinceId").val(((vDtIds != null && vDtIds.length >= 3) ? vDtIds[1] : "")); $("#txtidataCountryId").val(((vDtIds != null && vDtIds.length >= 3) ? vDtIds[2] : "")); if ($("#gLanguageCurrent").val() == 'zh' || $("#gLanguageCurrent").val() == 'cn') { var vCity = ((vDNames != null && vDNames.length >= 1) ? vDNames[0] : ""); if (isInArray(vCity)) { $("#txtidataCityName").val(vCity); $("#txtidataProvinceName").val(vCity); } else { $("#txtidataCityName").val(((vDNames != null && vDNames.length >= 2) ? vDNames[0] : "")); $("#txtidataProvinceName").val(((vDNames != null && vDNames.length >= 2) ? vDNames[1] : "")); } $("#txtidataCountryName").val("中国"); } else { $("#txtidataCityName").val(((vDNames != null && vDNames.length >= 3) ? vDNames[0] : "")); $("#txtidataProvinceName").val(((vDNames != null && vDNames.length >= 3) ? vDNames[1] : "")); $("#txtidataCountryName").val(((vDNames != null && vDNames.length >= 3) ? vDNames[2] : "")); } } function clearCpcVal() { $("#txtidataCityId").val(''); $("#txtidataCityName").val(''); $("#txtidataProvinceId").val(''); $("#txtidataProvinceName").val(''); $("#txtidataCountryId").val(''); $("#txtidataCountryName").val(''); } //处理item上下和自己的方向 function hanlderItemDir($option, $parent, dir) { $parent.find(".city-con a").removeClass("focusActive"); if ($option.length == 0) { $parent.find(".city-con a").first().addClass("focusActive"); } else { switch (dir) { case "prev": if ($option.prev().length) { $option.prev().addClass("focusActive"); } else { $parent.find(".city-con a").last().addClass("focusActive"); } break; case "next": if ($option.next().length) { $option.next().addClass("focusActive"); } else { $parent.find(".city-con a").first().addClass("focusActive"); } break; default: $option.addClass("focusActive"); } } scrollVisiable($parent.find(".city-con"), $parent.find(".city-con a.focusActive")); } //如果有滚动条那么就显示出来 function scrollVisiable($content, $active) { var conHeight = $content.height(); var conTop = $content.offset().top var activeTop = $active.offset().top; var activeHeight = $active.height() + (parseFloat($active.css("padding-top"), 10) || 0) + (parseFloat($active.css("padding-top"), 10) || 0) if (conHeight < (activeTop - conTop + activeHeight)) { $content.scrollTop((activeTop - conTop) - conHeight + activeHeight + $content.scrollTop()) } else if (activeTop - conTop < 0) { $content.scrollTop((activeTop - conTop) + $content.scrollTop()) } } //处理option的上下 function hanlderOptionDir(e, $parent,$t) { var $option = $parent.find(".city-con a.focusActive"); var skip; if (e.keyCode*1==38 ) {//== "ArrowUp" $t.data("tabfocusselect",true); hanlderItemDir($option, $parent, "prev") } else if (e.keyCode*1==40 ) {//e.key == "ArrowDown" $t.data("tabfocusselect",true); hanlderItemDir($option, $parent, "next") } else { skip = true; } return skip } //处理上下和左右入口 function hanlderDir(e, $t) { var $select = $t.parents(".J-validItem") var skip = false; if ($select.find(".city-con").is(":hidden")) { if ( (e.keyCode*1==40) || (e.keyCode*1==13) ) {//e.key == "ArrowDown"//Enter $select.find(".city-con").show(); } } else { if ( (e.keyCode*1==13) ) {//e.key == "Enter" //设置keyupselect防止下拉框隐藏 if($select.find(".city-con a.focusActive").length){ $select.find(".city-con a.focusActive").trigger("mousedown"); }else{ $select.find(".city-con").toggle(); } // $select.find(".focusActive").removeClass("focusActive"); //需要区分上下 } else { skip = hanlderOptionDir(e, $select,$t); //设置keyupselect防止下拉框隐藏 $select.find(".city-con a.focusActive").data("keyupselect",true).trigger("mousedown"); } } if (!skip) { e.stopPropagation(); e.preventDefault(); } } if ($(window).width() >= 750) { //按键 $(".city-search").data("skip", true).on("keyup", function (e) { hanlderDir(e, $(this)) }) } //加验证 var $form = $("#txtidataCityName").parents("form") $form.on("init-validform", function () { var validForm = $form.data("valid-form"); var setRule = validForm("getRule"); setRule["searchcity"] = { check: function (value, $obj) { return !searchVerification($obj) } } }) } if($(".J-select-country").length && $(".input-chengshi.city-search").length){ alert("error: double country input.") } //中文搜索 if ($("#gLanguageCurrent").val() == "zh" || $(".input-chengshi.city-search").length) { CITYSEARCH(); //英文加载数据 } if($(".J-select-country").length){ var ajaxUrl = location.protocol + "//" + location.host + "/en/Service/CollectUser?languages=en&type=getCountrys"; if ($("#gLanguageCurrent").val() == "ru-ru") ajaxUrl = location.protocol + "//" + location.host + "/en/Service/CollectUser?languages=ru-RU&type={CF1E2149-3043-4EF3-870D-DB4A12C530AA}"; $.ajax({ type: "get", url: ajaxUrl, dataType: "json", success: function (data) { if (data && data.length) { var arr = []; for (var i = 0; i < data.length; i++) { arr.push('
  • ' + data[i].name + '
  • ') } $(".J-select.J-select-country").data("data", data).find(".J-select-option").html(arr.join("")).trigger("data-ready") } else { $(".J-select.J-select-country").data("data", []).find(".J-select-option").html('
  • no result
  • ') } }, error: function () { $(".J-select.J-select-country").find(".J-select-option").html('
  • error
  • ') } }) }