超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

15天學(xué)會jQuery (6-10)

admin
2010年4月24日 10:46 本文熱度 8579
這次的教程內(nèi)容貼近我擅長的技術(shù)方向:安全的contact forms。 [p]就像我在前一篇教程中提到的那樣,一個最普通的contact forms可以幫助訪客同你進(jìn)行通信來往而不需要暴露你的電子郵件地址給那些可惡的垃圾郵件制造者們。[/p] [p]但如果spammer們已經(jīng)盯上你,沒有什么比一個不安全的contact foms更糟糕的了。想象一下你的網(wǎng)絡(luò)空間提供商發(fā)給你一封措辭強(qiáng)烈的電子郵件,通知說:他們發(fā)現(xiàn)你的網(wǎng)站發(fā)送了大批量的性藥廣告以及其他垃圾郵件,另外,直到你停止這種行為之前,你的網(wǎng)站都將處于離線狀態(tài)–謝謝![/p] [p]那么,今天我要在這篇教程里告訴大家的是一種在任何contact forms上添加一個額外安全層的簡單方法-即使你沒有使用我提供的超級安全、超級靈活的ultimate form mail。[/p] [p]當(dāng)前狀況[/p] [p]你意識到spammer們已經(jīng)通過遠(yuǎn)程探測技術(shù)發(fā)現(xiàn)了你的contact forms的弱點(diǎn),而你希望他們走開。[/p] [p]難點(diǎn)[/p] [p]你不想使用captcha(completely automated public turing test to tell computers and humans apart),因為你明白,讓你的訪客先去閱讀那些歪七扭八的字母數(shù)字才能發(fā)送消息只能抑制他們想要互動的欲望,而不是促進(jìn)它。(數(shù)字驗證的缺陷)[/p] [p] [/p] [p]關(guān)鍵點(diǎn):你希望那些壞家伙們堵車到天黑,同時希望那些好孩子們一條大道通羅馬。[/p] [p]解決方案[/p] [p]你將學(xué)會在頁面加載的時候使用jquery來給你的contact forms添加一些隱藏的標(biāo)簽信息。當(dāng)窗體信息被提交到服務(wù)器端的時候,你可以用一些簡單的php代碼實(shí)現(xiàn)如下的步驟:[/p] [p]隱藏的標(biāo)簽被識別出來 隱藏標(biāo)簽的信息與你的網(wǎng)站訪客下載到瀏覽器上的cookie里的某項標(biāo)志相一致 隱藏標(biāo)簽的有效時間還未過期 換句話說,你的訪客們只有在一段有限的時間內(nèi)才可以填寫窗體并進(jìn)行發(fā)送。如果一個spammer嘗試通過遠(yuǎn)程調(diào)用來提交窗體信息到你的服務(wù)器,他們將會發(fā)現(xiàn)自己踢到了一塊又厚又硬的鐵板,不付出點(diǎn)代價休想通過。[/p] [p]我將要告訴你的這種方法是從一位非常聰明的同事chris shiflett提供的藍(lán)本基礎(chǔ)上修改而成的。他是位專業(yè)的安全專家,對php程序員經(jīng)常遇到的安全問題了如指掌(我怎么感覺他又要忍不住提到他的ultimate form mail 了~~汗)。[/p] [p]教程[/p] [p]基于上次那篇《斑馬線表格輕松制作》的反響良好,我決定再次制作一次類似的“手把手圖文教程”。雖然要花費(fèi)些時間,但很值得這么做。[/p] [p]手把手教程[/p] [p]demo[/p] [p]源代碼[/p] [p]銀彈?1)[/p] [p]銀彈是軟件領(lǐng)域的說法,意為解決一切問題的方法。這個來源于歐洲的傳說,說是只有銀彈可以消滅狼人?!澳敲矗F(xiàn)在我的窗體就是100%安全的,可以假設(shè)任何免費(fèi)的cntact forms程序,然后高枕無憂了?”[/p] [p]呃。。。非也。[/p] [p]這種安全模式基于一個關(guān)鍵的假定:spammer們總是會拿軟柿子捏,浪費(fèi)時間去解決一個狡猾的對手對他們來說就是浪費(fèi)金錢。[/p] [p]現(xiàn)在, 好好聽著,我的朋友們:[/p] [p]這個技術(shù),盡管相當(dāng)健壯,但仍然不是解決目前脆弱的窗體處理程序問題的靈丹妙藥。[/p] [p]我的這些安全建議的目的是為了讓spammer們知難而退。小偷們?nèi)胧冶I竊之前總會進(jìn)行仔細(xì)踩點(diǎn),他們只對那些可以用最小代價獲取最大利益的房間感興趣。[/p] [p]換句話說,如果在他們動手之前有99%的機(jī)會擋住他們的試探,而且實(shí)現(xiàn)起來相當(dāng)容易,為什么不試一試呢?這才是此項技術(shù)要實(shí)現(xiàn)的目標(biāo)。[/p] [p]但這還是治標(biāo)不治本,不能解決所有問題。[/p] [p][br]--------------------------------------------------------------------------------[/p] [p][hilitecolor=#808080][color=#ffffff]15 days of jquery(day 7) --- 樣式表切換[/color][/hilitecolor][/p] [p][br]我第一次看到樣式表切換器是在a list apart或者simple bits,那是兩個設(shè)計師最應(yīng)該去的網(wǎng)站。[/p] [p]從那以后,我找到了很多可以讓訪客通過鼠標(biāo)點(diǎn)擊某個地方切換樣式表的方法。但最近我要寫一篇如何 使用jquery編寫簡單代碼實(shí)現(xiàn)它的教程。[/p] [p]我將向你們逐步解說整個的過程,不僅僅因為要展示jquery代碼的簡介,同時也要揭示jquery庫中的若干高級特性。[/p] [p]首先,代碼[/p] [p]$(document).ready(function()[br]{[br]$('.styleswitch').click(function()[br]{[br]switchstylestyle(this.getattribute("rel"));[br]return false;[br]});[br]var c = readcookie('style');[br]if (c) switchstylestyle(c);[br]});[br]function switchstylestyle(stylename)[br]{[br]$('link[@rel*=style]').each(function(i)[br]{[br]this.disabled = true;[br]if (this.getattribute('title') == stylename) this.disabled = false;[br]});[br]createcookie('style', stylename, 365);[br]}[br] [br]$(document).ready(function()[br]{[br]$(‘.styleswitch’).click(function()[br]{[br]switchstylestyle(this.getattribute("rel"));[br]return false;[br]});[br]var c = readcookie(’style’);[br]if (c) switchstylestyle(c);[br]});[br]function switchstylestyle(stylename)[br]{[br]$(‘link[@rel*=style]’).each(function(i)[br]{[br]this.disabled = true;[br]if (this.getattribute(‘title’) == stylename) this.disabled = false;[br]});[br]createcookie(’style’, stylename, 365);[br]}其他這里沒有提到的部分是你將在后面看到的創(chuàng)建和讀取cookie的函數(shù)。[/p] [p]熟悉的開篇[/p] [p]$(document).ready(function()[br]{[br]$('.styleswitch').click(function()告訴jquery“以最快的速度查找所有包含對象名‘styleswitch’的元素,并在他們被鼠標(biāo)點(diǎn)擊時執(zhí)行一個函數(shù)”。[/p] [p]看起來不錯。當(dāng)鼠標(biāo)點(diǎn)擊預(yù)先指定的元素時,switchstylestyle函數(shù)將被調(diào)用。從現(xiàn)在開始是重點(diǎn)。[/p] [p]這句話什么意思?[/p] [p]第一次看到這句代碼的時候我的腦子有些卡殼:[/p] [p]$('link[@rel*=style]').each(function(i) {[/p] [p]在互聯(lián)網(wǎng)上搜索了一下后我空手而歸。最后不得不找到了jquery的作者john resig,向他咨詢。[/p] [p]他直接給了我一個jquery網(wǎng)站的頁面地址,里面講解了若干jquery提供的高級特性(xpath),可以用來查找并操作頁面中的若干元素。[/p] [p]如果你看過這些東西你就能明白上面那句神秘的代碼的含義是告訴jquery“查找所有帶rel屬性并且屬性值字符串中包含‘style’的link鏈接元素”。[/p] [p]嗯?[/p] [p]讓我們看看如何編寫包含一個主樣式表,兩個備用樣式表的頁面:[/p] [p][br][br]我們可以看到所有樣式表都含有一個包含‘style’字串的rel屬性。[/p] [p]所以結(jié)果一目了然,jquery輕松定位了頁面中的樣式表鏈接。[/p] [p]下一步?[/p] [p]each()函數(shù)將遍歷所有這些樣式表鏈接,并執(zhí)行下一行中的代碼:[/p] [p]this.disabled = true;[br]if (this.getattribute('title') == stylename) this.disabled = false;“首先禁用所有的樣式表鏈接,然后開啟任何title屬性值與switchstylestyle函數(shù)傳遞過來的字串相同的樣式表”[/p] [p]一把抓啊,不過很有效。[/p] [p]現(xiàn)在我們需要保證的是那些樣式表存在并且有效。[/p] [p]完整代碼和演示[/p] [p]既然 kelvin luck已經(jīng)編寫了這些代碼,我就不在這里重復(fù)了。[/p] [p]demo[/p] [p]我相信kelvin的靈感是從 這個網(wǎng)站那里得到的,我們正好可以看看使用其他工具實(shí)現(xiàn)這個功能是否要比jquery更加復(fù)雜冗長。[/p] [p][br]--------------------------------------------------------------------------------[/p] [p][color=#ffffff][hilitecolor=#808080]15 days of jquery(day 8) --- 使用javascript(jquery)實(shí)現(xiàn)圓角邊框[/hilitecolor][/color][/p] [p][br]當(dāng)我看到這些實(shí)現(xiàn)圓角邊框的html源代碼的時候,我發(fā)現(xiàn)這很適合用來寫一篇jquery教程–使用wrap()、prepend()、append() 函數(shù)。[/p] [p]這里是原先的html代碼,我們將從這里開始:[/p] [p]
[br]
[br]
[br]
[br]
[br]
[br]
[br]
[br]
[br]
[br]
[br]
[br]
[br]
[br]
現(xiàn)在我們怎么使用jquery來精簡這段代碼呢?[/p] [p]首先,我們需要一個“鉤子”,一個特殊的html元素,或者一個id,或者一個對象名–來告訴jquery處理的目標(biāo)。[/p] [p]現(xiàn)在我們改成了這個樣子:[/p] [p]
下一步,我們使用jquery來將剩下的代碼添加進(jìn)去:[/p] [p]$(document).ready(function(){ $("div.roundbox") .wrap('
'+ [br]'
'+ [br]'
'+ [br]'
'+ [br]'
'+ [br]'
'+ [br]'
'+ [br]'
'); [br]});其他div標(biāo)記去哪里了?[/p] [p]仔細(xì)觀察代碼,你就會發(fā)現(xiàn)它們都跑到了js代碼里面,在wrap函數(shù)執(zhí)行時它們將嵌套在“鉤子div”的內(nèi)部。[/p] [p]細(xì)心的觀眾會發(fā)現(xiàn)我漏掉了部分代碼。這是因為jquery中的wrap()函數(shù)要求div標(biāo)簽必須嚴(yán)格對稱嵌套才能工作。[/p] [p]具體的,我去掉了下面兩個部分:[/p] [p]
[br]
添加和預(yù)置一體化[/p] [p]下一步我們將會通過prepend和append函數(shù)將這兩段代碼添加進(jìn)帶有dialog對象名的div標(biāo)記內(nèi)部,并且使用“連鎖”方法。[/p] [p]$('div.dialog').prepend('
'+ [br]'
'+ [br]'
')[br].append('
'+ [br]'
'+ [br]'
');示例及代碼[/p] [p]我已經(jīng)在網(wǎng)上放置了一個演示頁面供大家查看。建議你看一下頁面的源代碼,體會jquery給頁面代碼帶來的清爽和便捷。[/p] [p]這些代碼來自 schillmania的一篇文章,個人推薦大家下載包含點(diǎn)綴圖片的zip打包,非常精美。[/p] [p]不使用圖片的圓角邊框[/p] [p]有很多方法可以實(shí)現(xiàn)圓角邊框–有些方法甚至不需要圖片。[/p] [p]在jquery的網(wǎng)站上有一個用來制作無圖圓角邊框的插件。雖然不是適合所有人(或者說所有程序),但也值得學(xué)習(xí)。[/p] [p]看看它的漂亮代碼吧(使用時):[/p] [p]$(document).bind("load", function(){ [br]$("#box1").corner()[br]});[br]--------------------------------------------------------------------------------[/p] [p][hilitecolor=#808080][color=#ffffff]15 days of jquery(day 9) --- 快速和略顯粗劣的ajax視頻教程[/color][/hilitecolor][/p] [p][br]今天我的想法有點(diǎn)改變。近段時間以來我一直考慮注冊一個youtube帳號來上傳一些教程錄像,現(xiàn)在我終于做出了決定并上傳了一個。在這里我將手把手的向大家演示為你的網(wǎng)站添加一些ajax基本應(yīng)用的方法。[/p] [p]錄像很短,因為youtube對上傳影片的長度有限制(10分鐘以內(nèi))。當(dāng)然由于制作倉促,錯誤在所難免。比如在某個地方我稱cgi為“服務(wù)器端腳本”,而更準(zhǔn)確的說法應(yīng)該是“服務(wù)器端語言”。[/p] [p]這是ajax,還是ahah,抑或axah?[/p] [p]你將看到的東西其實(shí)更接近ahah而不是純粹的ajax。[/p] [p]有什么區(qū)別么?ajax中的“x”代表著xml。但更多時候人們喜歡使用簡單的文本或者javascript代碼或者單獨(dú)文件而不是那種復(fù)雜冗長的xml。對此有篇文章有詳細(xì)論述:ajax vs. ahah。[/p] [p]至于axah。。。 cody lindley的文章可以解釋一切。對ajax的一些工作理念有興趣的讀者可以看一下。[/p] [p]教程錄像[/p] [p]這個頁面上有我提供的演示。[/p] [p][br]--------------------------------------------------------------------------------[/p] [hilitecolor=#808080][color=#ffffff]15 days of jquery(day 10) --- 使用jquery javascript 庫實(shí)現(xiàn)“即點(diǎn)即改”的[/color][/hilitecolor]ajax化 [p][br]以前我在quirksmode網(wǎng)站見過這種代碼,后來又在24 ways網(wǎng)站看到了一個更具web 2.0風(fēng)格的方案。這次我將為大家展示兩種使用jquery實(shí)現(xiàn)相同功能(甚至更好)的方法。[/p] [p]目標(biāo)[/p] [p]一個用ajax(或ahah)技術(shù)設(shè)計的頁面,訪問者無需離開就可以在看到的(x)html 頁面上編輯內(nèi)容。[/p] [p]方案[/p] [p]點(diǎn)擊需要編輯的文本,變幻出一個帶有保存和取消按鈕的textarea。修改的部分將通過ahah傳送至服務(wù)器端的一個php腳本文件,用來更新數(shù)據(jù)庫(mysql或普通文件)。[/p] [p]演示[/p] [p]ajax式即點(diǎn)即改演示一[/p] [p]在這第一個演示中,我使用了一個id為“editinplace”的div元素。當(dāng)鼠標(biāo)劃過這里時,背景顏色將變成淺黃色。點(diǎn)擊文本將啟動一些dom操作,div元素被一個textarea元素取代–內(nèi)中包含原先的文本。[/p] [p]點(diǎn)擊保存按鈕將向服務(wù)器端的php腳本文件發(fā)送新的html內(nèi)容,并重新輸出收到的新文本內(nèi)容(通過 $_post)。[/p] [p]在真實(shí)應(yīng)用環(huán)境下,你還應(yīng)當(dāng)添加一個安全性檢測,然后才能更新數(shù)據(jù)庫并返回更新后的頁面內(nèi)容,同事告知jquery執(zhí)行成功的信息。[/p] [p]但在這個例子中,所有的修改都是成功的,發(fā)送給php腳本的信息將原封不動的返回到j(luò)query代碼,顯示到一個普通的警告窗口里。[/p] [p]解釋[/p] [p]開頭部分說了很多次了,如果你不想使用jquery提供的document.ready函數(shù),盡可以選擇你自己中意的init()函數(shù)。[/p] [p]$(document).ready(function(){[br]setclickable();[br]});頁面上第一個被執(zhí)行的就是這個setclickable()函數(shù)。它的任務(wù)就是做以下內(nèi)容:[/p] [p]查找包含id為“editinplace”的div元素,然后告訴jquery在這些div被點(diǎn)擊時執(zhí)行某些操作。[/p] [p]function setclickable() {[br]$('#editinplace').click(function() {讀取div內(nèi)部的html代碼的任務(wù)將交給jquery的html()函數(shù)來完成。這些html將會額外添加若干代碼以組成textarea里的保存和取消按鈕。[/p] [p]"var textarea = '
';[br]var button = '
or
';[br]var revert = $(this).html();同樣還是這些在div內(nèi)部找到的html代碼將會賦值給一個叫做“revert”的變量。這個變量將用來在取消按鈕被按下的事件中輸出原始文本。[/p] [p]var revert = $(this).html();jquery的dom函數(shù)“after”用來將新生的textarea html代碼放置在我們指定的div元素后。我在后面緊跟著連鎖上了一個remove()方法 來移除div元素以節(jié)省代碼。[/p] [p]$(this).after(textarea+button).remove();在使用jquery的時候,我通過對象名來定位保存和取消按鈕對象。我指示jquery在任一按鈕按下時觸發(fā)最后一個函數(shù)“savechanges”。我告訴了jquery在div元素被點(diǎn)擊時做什么事情,但我沒有在最后加上省略號因為我希望在這個div操作語句后面連鎖其他方法。[/p] [p]$('.savebutton').click(function(){savechanges(this, false);});[br]$('.cancelbutton').click(function(){savechanges(this, revert);});[br]})我再連鎖了一個簡單的mouseover和mouseout事件,告訴jquery在鼠標(biāo)指針掠過我們指定的div元素(id=editinplace)的時候添加和移除一個對象。[/p] [p].mouseover(function() {[br]$(this).addclass("editable");[br]})[br].mouseout(function() {[br]$(this).removeclass("editable");[br]});[br]};//end of function setclickable函數(shù)“savechanges”將以按鈕對象做為第一個參數(shù),而cancel參數(shù)則取兩種值,false或者保存在revert變量中的html代碼內(nèi)容。[/p] [p]function savechanges(obj, cancel) {如果cancel為假,則函數(shù)將保存更改并使用html格式發(fā)送給服務(wù)器端的php腳本。我在這里使用了jquery內(nèi)置的一個dom函數(shù)實(shí)現(xiàn)對textarea內(nèi)容的提取操作:parent()和siblings()。[/p] [p]if(!cancel) {[br]var t = $(obj).parent().siblings(0).val();dom基礎(chǔ)超出了本系列教程的范圍,但在這個應(yīng)用中我只是告訴了jquery“對象(保存按鈕)有一個父元素(div)。。。去找到它。那個元素?fù)碛幸粋€或多個dom樹同級對象。。。我只想找到其中的第一個。然后提取那個對象的所有內(nèi)容?!盵/p] [p](稍等。。。如果你對dom風(fēng)格的代碼不是很熟悉的話,前面我的注釋可能并不好理解。我還是建議你之前google一下“dom javascript”或者其他相關(guān)的信息。)[/p] [p]這些html賦值給了t變量,現(xiàn)在要通過post方法把它發(fā)送給test2.php。[/p] [p]$.post("test2.php",{[br]content: t[br]},function(txt){[br]alert( txt);[br]});[br]}如果cancel有一個值,那么必然是保存在revert變量中的原始html內(nèi)容。所以,在這個時候我希望變量t變?yōu)樵糷tml內(nèi)容。[/p] [p]else {[br]var t = cancel;[br]}下一步是通過jquery提供的dom函數(shù)放置一個新的div元素,id為“editinplace”,在這之后包含了textarea元素。。。然后刪除掉這個div元素。[/p] [p]$(obj).parent().parent().after('
'+t+'
').remove()在果殼中,這將告訴jquery“在dom樹中上躍兩次。將html代碼附在到達(dá)位置的對象之后,然后移除那個對象。”[/p] [p]最后,我們再次調(diào)用setclickable函數(shù)并關(guān)閉savechange()函數(shù)。重調(diào)setclickable()函數(shù)的含義是重新設(shè)置onmouseover,onmouseout,和onclick事件到初始狀態(tài)。[/p] [p]setclickable();[br]}第二個示例[/p] [p]第二個方法非常類似但也有點(diǎn)復(fù)雜。[/p] [p]示例二[/p] [p]沒有用到龐大的單獨(dú)div元素,這個示例將每個段落p標(biāo)簽變換成單獨(dú)的可編輯區(qū)域。[/p] [p]這里的難度在于你如何在向服務(wù)器端腳本發(fā)送數(shù)據(jù)時指定正確的段落p標(biāo)簽。[/p] [p]在這里我通過為每個p標(biāo)簽編號并將這個編號一同發(fā)送給服務(wù)器端的php腳本的方式解決了問題。你會在alert窗口中看到php腳本是如何“知道”哪個p標(biāo)簽里的內(nèi)容被修改的。[/p] [p]已知的問題[/p] [p]現(xiàn)實(shí)的應(yīng)用中,你在使用類似的功能時首先需要驗證更改的內(nèi)容的合法性,然后才能將數(shù)據(jù)發(fā)送到服務(wù)器端。顯然在這里我們刻意把這些內(nèi)容忽略掉了。[/p] [p] [/p] [p]本文來自csdn博客,轉(zhuǎn)載請標(biāo)明出處:[url=http://blog.csdn.net/gohands/archive/2008/01/18/2050594.aspx]http://blog.csdn.net/gohands/archive/2008/01/18/2050594.aspx[/url][/p]

該文章在 2010/4/24 10:46:39 編輯過
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊、財務(wù)費(fèi)用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved