在網(wǎng)頁(yè)開(kāi)發(fā)過(guò)程中,我們經(jīng)常需要使用JavaScript來(lái)與用戶進(jìn)行交互。其中,confirm函數(shù)是常用的一種彈窗交互方式。但是,confirm彈窗樣式單調(diào),不便于自定義樣式。為了滿足定制彈窗的需求,我們就需要對(duì)confirm進(jìn)行重寫(xiě)。
一般來(lái)說(shuō),重寫(xiě)confirm的方法有兩種。第一種是在調(diào)用confirm函數(shù)之前,先定義一個(gè)新的confirm函數(shù)。這個(gè)新的函數(shù)可以自定義彈窗樣式,并且根據(jù)用戶的選擇進(jìn)行相應(yīng)的處理。比如下面這個(gè)例子:
在這個(gè)例子中,我們定義了一個(gè)my_confirm函數(shù),它接受兩個(gè)參數(shù):msg和callback。msg表示要顯示的消息,callback是一個(gè)回調(diào)函數(shù),在用戶點(diǎn)擊“確定”或“取消”按鈕后被調(diào)用。這個(gè)函數(shù)會(huì)生成一個(gè)新的容器節(jié)點(diǎn),并在其中創(chuàng)建消息、按鈕等元素,最后將容器節(jié)點(diǎn)添加到文檔中。當(dāng)用戶點(diǎn)擊“確定”或“取消”按鈕時(shí),回調(diào)函數(shù)被調(diào)用,并傳遞一個(gè)布爾值表示用戶的選擇。
另一種重寫(xiě)confirm的方法是使用ES6的Promise。Promise可以將異步操作進(jìn)行封裝,并在操作完成后返回一個(gè)成功或失敗的結(jié)果。我們可以使用Promise來(lái)實(shí)現(xiàn)一個(gè)新的confirm函數(shù)。代碼如下:
在這個(gè)例子中,我們定義了一個(gè)new_confirm函數(shù),它接受一個(gè)參數(shù)msg。這個(gè)函數(shù)返回一個(gè)Promise對(duì)象,用于管理異步操作。當(dāng)用戶點(diǎn)擊“確定”或“取消”按鈕時(shí),resolve函數(shù)被調(diào)用,并傳遞一個(gè)布爾值表示用戶的選擇。我們可以通過(guò)鏈?zhǔn)秸{(diào)用then方法來(lái)處理Promise的結(jié)果,并根據(jù)用戶的選擇進(jìn)行相應(yīng)的處理。
總的來(lái)說(shuō),重寫(xiě)confirm的方法有很多種,可以根據(jù)自己的需求選擇合適的方式。重寫(xiě)confirm可以讓我們更好地掌控網(wǎng)頁(yè)交互的形式和樣式,從而提高用戶體驗(yàn)。
一般來(lái)說(shuō),重寫(xiě)confirm的方法有兩種。第一種是在調(diào)用confirm函數(shù)之前,先定義一個(gè)新的confirm函數(shù)。這個(gè)新的函數(shù)可以自定義彈窗樣式,并且根據(jù)用戶的選擇進(jìn)行相應(yīng)的處理。比如下面這個(gè)例子:
<script> function my_confirm(msg, callback) { var box = document.createElement('div'); box.className = 'my-confirm-box'; var content = document.createElement('div'); content.className = 'my-confirm-content'; content.innerHTML = '<p>' + msg + '</p>'; box.appendChild(content); var buttons = document.createElement('div'); buttons.className = 'my-confirm-buttons'; var ok = document.createElement('button'); ok.innerHTML = '確定'; ok.onclick = function() { callback(true); document.body.removeChild(box); }; buttons.appendChild(ok); var cancel = document.createElement('button'); cancel.innerHTML = '取消'; cancel.onclick = function() { callback(false); document.body.removeChild(box); }; buttons.appendChild(cancel); box.appendChild(buttons); document.body.appendChild(box); } </script>
在這個(gè)例子中,我們定義了一個(gè)my_confirm函數(shù),它接受兩個(gè)參數(shù):msg和callback。msg表示要顯示的消息,callback是一個(gè)回調(diào)函數(shù),在用戶點(diǎn)擊“確定”或“取消”按鈕后被調(diào)用。這個(gè)函數(shù)會(huì)生成一個(gè)新的容器節(jié)點(diǎn),并在其中創(chuàng)建消息、按鈕等元素,最后將容器節(jié)點(diǎn)添加到文檔中。當(dāng)用戶點(diǎn)擊“確定”或“取消”按鈕時(shí),回調(diào)函數(shù)被調(diào)用,并傳遞一個(gè)布爾值表示用戶的選擇。
另一種重寫(xiě)confirm的方法是使用ES6的Promise。Promise可以將異步操作進(jìn)行封裝,并在操作完成后返回一個(gè)成功或失敗的結(jié)果。我們可以使用Promise來(lái)實(shí)現(xiàn)一個(gè)新的confirm函數(shù)。代碼如下:
<script> function new_confirm(msg) { return new Promise(function(resolve, reject) { var box = document.createElement('div'); box.className = 'new-confirm-box'; var content = document.createElement('div'); content.className = 'new-confirm-content'; content.innerHTML = '<p>' + msg + '</p>'; box.appendChild(content); var buttons = document.createElement('div'); buttons.className = 'new-confirm-buttons'; var ok = document.createElement('button'); ok.innerHTML = '確定'; ok.onclick = function() { resolve(true); document.body.removeChild(box); }; buttons.appendChild(ok); var cancel = document.createElement('button'); cancel.innerHTML = '取消'; cancel.onclick = function() { resolve(false); document.body.removeChild(box); }; buttons.appendChild(cancel); box.appendChild(buttons); document.body.appendChild(box); }); } <br> new_confirm('確定要?jiǎng)h除嗎?').then(function(result) { if (result) { alert('刪除成功!'); } else { alert('取消刪除!'); } }); </script>
在這個(gè)例子中,我們定義了一個(gè)new_confirm函數(shù),它接受一個(gè)參數(shù)msg。這個(gè)函數(shù)返回一個(gè)Promise對(duì)象,用于管理異步操作。當(dāng)用戶點(diǎn)擊“確定”或“取消”按鈕時(shí),resolve函數(shù)被調(diào)用,并傳遞一個(gè)布爾值表示用戶的選擇。我們可以通過(guò)鏈?zhǔn)秸{(diào)用then方法來(lái)處理Promise的結(jié)果,并根據(jù)用戶的選擇進(jìn)行相應(yīng)的處理。
總的來(lái)說(shuō),重寫(xiě)confirm的方法有很多種,可以根據(jù)自己的需求選擇合適的方式。重寫(xiě)confirm可以讓我們更好地掌控網(wǎng)頁(yè)交互的形式和樣式,從而提高用戶體驗(yàn)。