因为当我们输入 . 时,selectVal 的获取规则会改变,所以这里我们需要将 selectVal 获取方式区分开来,注意:这里我们要考虑到存在一个操作 -- 回删,输入 $,下拉框出来了,但是我
们又觉得此处 $ 出现得还不是时候(反正就是要删),删除 $,那么检索事件也就结束,初始化相关变量。当输入的是 . 时,如果要替换值,那么我们需要的获取从 . 在的位置往后找
到离 . 最近的 $ 符号,得到其在文本中的位置,这样我们才能重组 value
// 获取检索的值 selctVal var getSelectVal = function(){ var val = _this.val(); if( searchStart == true && enterCharacter != opts.levelCharacter ){ // 当输入的是字符 triggerCharacter 的时候 默认为 $ selectVal = val.substring(oldCurrentPos,currentPos); // 检索值直接为获取的文本区域 } if( searchStart == true && enterCharacter == opts.levelCharacter ){ // 当输入的是字符 levelCharacter 的时候 默认为 . dotVal = val.slice(0,currentPos); dotDollerPos = dotVal.lastIndexOf(opts.triggerCharacter)+1; dotSelectVal = dotVal.substring(dotDollerPos,currentPos); selectVal = dotSelectVal; console.log("到当前下标的字符串为:"+dotVal); console.log("到当前下标最近的$下标是:"+dotDollerPos); console.log("输入 . 时检索值为:"+dotSelectVal); } console.log("获取的值区域为:"+oldCurrentPos+"-"+currentPos); if( oldCurrentPos > currentPos ){ // 回删时清除选项li 隐藏下拉框 endSearch() } }
改变输入框 value 值,定位光标位置
因为我们这里存在两种选择方式,鼠标点击和按 enter 键,两者的区别只在于执行事件的方式,将同样的代码写两遍未免有点不美,这里我们将它摘出来
注意:此处需要区分触发检索事件的符号是 $ 还是 . ,因为符号不同,我们获取的值是不同的,光标定位也是不同
// 选中li当前项 改变输入框value值 定位光标 var changeValue = function(){ var val = _this.val(); var liTxt = _this.dropdown.find(".active").text(); var liTxtLength = liTxt.length; var valLength = val.length; // 此处需要区分触发检索事件的符号是 if( enterCharacter == opts.levelCharacter ){ // 如果是 . var beforeSelectVal = val.substring(0,dotDollerPos); } else{ // 如果是 & var beforeSelectVal = val.substring(0,oldCurrentPos); } var beforeSelectValLength = beforeSelectVal.length; var afterSelectVal = val.substring(currentPos,valLength); var pos = liTxtLength + beforeSelectValLength; val = beforeSelectVal+liTxt+afterSelectVal; _this.val(val); setCarePosition(pos,pos); // 将光标定位在插入值后面 endSearch(); console.log("文本长度:"+beforeSelectVal.length); console.log("li文本为:"+liTxt); console.log("前部为:"+beforeSelectVal); console.log("后部分为:"+afterSelectVal); return false; // 此处必须加上return false 不然会调用callbacktips 初始化 dropdown }
内容版权声明:除非注明,否则皆为本站原创文章。