接上篇博客:
先看js的第1段代碼
$(document).delegate(".his-record>div","click",function(){ $("#idNumber1").val($(this).text()); });
因為我們的搜索記錄是通過prepend()方法動態添加的,如果用一般的事件綁定方法,會沒有效果。熟悉jquery的朋友知道,這時候應該是delegate()方法出場了,w3cschool的解釋:使用 delegate() 方法的事件處理程序適用於當前或未來的元素(比如由腳本創建的新元素)。
接下來是init()函數,這里的考慮是:首次加載頁面,用這個函數獲取數據,顯示搜索記錄。當我們點擊搜索記錄或者輸入搜索詞,再次搜索的時候,也要刷新搜索記錄顯示。另外,清除記錄的時候,也需要刷新記錄顯示,基於這些考慮,寫了init()函數。調用的地方有4個。
這段判斷是,去掉我們不想要的localStorage記錄,因為在打開本頁面之前,本域名下的localStorage可能就有記錄。isNaN()判斷字符串里的內容是否為數字。這里判斷並不是很嚴謹,可以改寫。
很重要的一點,init()執行時,每次會從localStorage獲取【最新】的記錄,然后添加到顯示的區域。因此,必須每次清空這個區域。
下面的代碼來到點擊搜索按鈕,改變localStorage記錄,然后調用init()讓最新的記錄顯示。第1步,先判斷輸入。如果輸入為空,直接返回,不往下執行:
if(!value){ alert("你未輸入搜索內容"); return false; }
輸入合法的情況又分了兩種:1.輸入的內容localStorage記錄里有的情況,2.輸入的內容沒有記錄的情況。情況1不用考慮大於6條記錄,因為重復的時候只會改變順序而不會新增記錄。這樣不會超過原先的記錄條數。情況2就需要考慮記錄條數大於6的時候,出現大於6,必須把最早的記錄移除,然后把最新的記錄添加進去。
情況1的條件:
//輸入的內容localStorage有記錄 if($.inArray(value,hisItem)>=0){