濮阳杆衣贸易有限公司

主頁 > 知識庫 > Ruby on Rails中jquery_ujs組件拖慢速度的問題解決

Ruby on Rails中jquery_ujs組件拖慢速度的問題解決

熱門標(biāo)簽:湖州u友防封電銷卡 高德地圖標(biāo)注客服 電銷機(jī)器人廠商代理 徐州網(wǎng)絡(luò)外呼系統(tǒng)哪個(gè)好 滴滴外呼系統(tǒng) 白銀外呼paas系統(tǒng) 常德電銷平臺外呼系統(tǒng)軟件價(jià)格 地圖標(biāo)注賺錢項(xiàng)目注冊 百度地圖標(biāo)注自定義圖片

jquery_ujs 對 rails 來說,是一個(gè)非常重要的組件,它包含在 rails 的默認(rèn)組件之中。

jquery ujs 包含一些非常便捷的功能,比如確認(rèn)對話框、觸發(fā) ajax、自動禁用表單提交按鈕等,本文主要討論的是觸發(fā) ajax 的功能。

通過添加簡單的標(biāo)簽屬性,jquery ujs 可以把一個(gè)普通的鏈接或者表單轉(zhuǎn)換成 ajax 提交,而不需要寫 JavaScript 代碼。

%= link_to '關(guān)閉項(xiàng)目', close_project_path(project), remote: true, method: :post %>

上面的代碼會生成如下的代碼

a href="/projects/1/close" data-remote="true" data-method="post">關(guān)閉項(xiàng)目/a>

當(dāng)用戶點(diǎn)擊后,它會觸發(fā)一個(gè)指向地址 /projects/1/close,method 為 post 的 ajax 請求,而不是 get 的 普通請求,這樣使得實(shí)現(xiàn) ajax 調(diào)用變得非常便捷。

網(wǎng)速慢導(dǎo)致的問題
事情并不都是美好的,在網(wǎng)速比較慢的時(shí)候,jquery ujs 的這個(gè)實(shí)現(xiàn)會出問題,如果文檔還沒有加載完成,用戶就點(diǎn)擊了鏈接,頁面會發(fā)起一個(gè)到鏈接地址的 GET 請求,頁面會跳轉(zhuǎn),但指向該地址的 GET 請求可以并不存在,這樣就會出錯。

有用戶有提過一個(gè)相關(guān)的 Issue,但是開發(fā)者并沒有受理,然而網(wǎng)速慢是中國的國情,問題我們還是得處理,借助于 CSS3 的一些特性,這個(gè)問題其實(shí)也不難解決。

pointer-events
pointer-events: none;

The element is never the target of mouse events; however, mouse events may target its descendant elements if those descendants have pointer-events set to some other value. In these circumstances, mouse events will trigger event listeners on this parent element as appropriate on their way to/from the descendant during the event capture/bubble phases.

這個(gè)屬性可以禁止元素的點(diǎn)擊事件,因?yàn)橐话?CSS 是先加載的,我們只要控制在頁面加載完成之前給 jquery ujs 相關(guān)的元素應(yīng)用 pointer-events: none; 樣式,在頁面加載完成后再去除該樣式,就可以解決網(wǎng)速慢的情況下,頁面沒有加載完成時(shí)用戶點(diǎn)擊 rmote 鏈接導(dǎo)致的錯誤了。

解決方案
添加如下的全局樣式,默認(rèn)情況下含有 data-remote 和 data-method 屬性的標(biāo)簽不可點(diǎn)擊,除非 body 元素含有名為 ready 的 css class。

[data-remote], [data-method] {
 pointer-events: none;

 button, input[type=submit] {
  pointer-events: none;
 }
}

body.ready {
 [data-remote], [data-method] {
  pointer-events: auto;

  button, input[type=submit] {
   pointer-events: auto;
  }
 }
}

然后通過段簡單的腳本讓頁面加載后給 body 元素添加 ready class

$(document).ready ->
 $('body').addClass('ready')

于是,問題輕松的就解決了。

標(biāo)簽:普洱 公主嶺 荊門 梧州 遼寧 三沙 永州 張家界

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Ruby on Rails中jquery_ujs組件拖慢速度的問題解決》,本文關(guān)鍵詞  Ruby,Rails,中,jquery,ujs,組件,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Ruby on Rails中jquery_ujs組件拖慢速度的問題解決》相關(guān)的同類信息!
  • 本頁收集關(guān)于Ruby on Rails中jquery_ujs組件拖慢速度的問題解決的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章
    广河县| 顺平县| 辛集市| 平遥县| 迁西县| 九龙县| 济宁市| 方正县| 礼泉县| 老河口市| 阳东县| 永胜县| 渝中区| 安阳县| 巴青县| 利辛县| 同江市| 京山县| 泾川县| 章丘市| 蒲江县| 梓潼县| 胶州市| 安多县| 读书| 江华| 江陵县| 万荣县| 永吉县| 闽清县| 叶城县| 四会市| 涟源市| 会昌县| 阿克陶县| 岑巩县| 长治市| 招远市| 岳阳市| 子长县| 陕西省|