摘要:最近公司碰到一個需求,基于開發(fā)一個通用的帶建議的控件忙亂中寫出了一個通用結(jié)構(gòu)和方法,跟大家分享一下,同時也算做自己的踩坑總結(jié)吧。如果不解綁,會導(dǎo)致你改變其中一個的值,其它都改變因為你初始化的時候,為每一個都綁定了事件。
最近公司碰到一個需求,基于jq 開發(fā)一個通用的 帶建議 的input 控件;
忙亂中寫出了一個通用結(jié)構(gòu)和方法,跟大家分享一下,同時也算做自己的踩坑總結(jié)吧。
通用一個模板,不影響原有 input 所在結(jié)構(gòu);因為原來的表單中 已經(jīng)有固定結(jié)構(gòu)的 input 了; 所以不能改html結(jié)構(gòu);
大概的思路就是,定義一個option 包裹層;然后點擊需要帶建議的input的時候,去根據(jù)自定義屬性 suggest-url 拿到對應(yīng)接口,取數(shù)據(jù)回來遍歷出選項。然后根據(jù) 這個input 的top,left 做絕對定位顯示出來。
//以下是固有的 form input 結(jié)構(gòu)逐步分解 實現(xiàn)步驟 希望只調(diào)用一個函數(shù)實現(xiàn)功能單位 (默認)//隨意放一個包裹層
全局 有 suggest-input 類 的input 都實現(xiàn)option 功能;
function initEvent() { suggestInput(); })函數(shù)實現(xiàn)與解析 如下:
function suggestInput() { //在input focus 的時候做處理。 $(".suggest-input").focus(function () { //獲取相關(guān) 接口的值 var url = $(this).attr("suggest-url"); //緩存操作對象 var $input = $(this); var $suggest = $(".suggest-option"); var $ul = $suggest.find("ul"); //通過input 找到 option 應(yīng)該顯示的top 和left var top = $input.offset().top + $input.outerHeight()+5; var left = $input.offset().left; var width = $input.outerWidth(); //如下是基于 url 的ajax請求,此處暫時用靜態(tài)數(shù)據(jù) /*doAjaxPost(url,"",function (resp) { if(resp.status==1){ var dataObj = resp.data; $ul.html(""); dataObj.forEach(function (p1) { $ul.append("
效果如下:
遇到的坑整個代碼邏輯下來 其實并不難理解,但是有兩個需要注意到的地方;
每次為點擊li綁定事件的時候,應(yīng)該先解除之前綁定的相同事件。$suggest.find("li").unbind("click").click(function (e) { })
如果不解綁,會導(dǎo)致你改變 其中一個 input 的值,其它input都改變; 因為你初始化的時候,為每一個li 都綁定了click 事件。
當表單出現(xiàn)滾動的時候,option 框沒有跟著 移動;$input.parents().each(function (i,o) { if($(o).css("overflow-y")=="auto"){ return $(o); } }).scroll(function () { $suggest.css({ top:$input.offset().top + $input.outerHeight()+5, }) });
解決辦法就是 檢查 發(fā)生滾動的box ;發(fā)生滾動的時候,重新計算一次 option 的 top;
不過如果手動綁定 scroll 監(jiān)聽,會容易有兩個問題。一,可能發(fā)生滾動的 box 不是你監(jiān)聽的box; 二,即使你知道發(fā)生滾動的div,如果直接寫死的話,發(fā)生結(jié)構(gòu)變化時,代碼不夠通用。
因為我通過遍歷 input 的父子集,找到最近一個 overflow-y:auto 的父box;這就是發(fā)生滾動的父box。
然后綁定事件。
最后效果:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/93963.html
摘要:前言最近比較熱門,但是成體系的文章并不多,前期避免不了踩坑我這篇文章主要介紹如何使用實現(xiàn)一個比較復(fù)雜的手勢交互,順便分享一下我在使用過程中遇到的一些小坑,減少大家入坑作者鏈接先睹為快本項目支持運行,效果如下對了,順便分享一下生成的小竅門,建 前言 Flutter最近比較熱門,但是Flutter成體系的文章并不多,前期避免不了踩坑;我這篇文章主要介紹如何使用Flutter實現(xiàn)一個比較復(fù)雜...
閱讀 2155·2021-11-12 10:36
閱讀 2147·2021-09-03 10:41
閱讀 2761·2021-08-19 10:57
閱讀 1230·2021-08-17 10:14
閱讀 1487·2019-08-30 15:53
閱讀 1210·2019-08-30 15:43
閱讀 975·2019-08-30 13:16
閱讀 2983·2019-08-29 16:56