亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

防止Ajax觸發jQuery腳本

防止Ajax觸發jQuery腳本

慕娘9325324 2021-03-30 08:19:07
我們在Drupal網站上獲得了一個簡單的jQuery腳本,該腳本注入了具有內容的div類:(function($) {Drupal.behaviors.myHelpText = {  attach: function (context, settings) {    //code starts//change placeholder text$('.form-item-quantity').append('<span class="help-block">For orders over 10 call for volume pricing</span>');$('.help-block').css("flex-basis", "100%");     //code ends  }};})(jQuery);該頁面包含Drupal Commerce和各種產品屬性字段,每次選擇屬性時,Ajax都會對其進行處理。并且這樣做時,我們的腳本每次在Ajax加載/更新時都注入相同的重復行。如何避免呢?我們只希望jQuery代碼在頁面加載一次即可工作。
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

您必須了解drupal.behaviors在頁面加載時以及ajax返回結果時觸發。之所以這樣設計,是因為您可能希望您的代碼在ajax結果上再次運行,例如,如果要通過ajax更新頁面的一部分并且需要應用事件偵聽器或添加一個類。


該context變量是這里的關鍵。


在第一頁加載時,上下文將是整個窗口,但是當ajax返回結果時,上下文將恰好是ajax返回的內容。

知道這一點,您應該context在jquery選擇器中使用。

例如。


(function($) {

  Drupal.behaviors.myHelpText = {

    attach: function (context, settings) {


    //code starts


    //change placeholder text


    $('.form-item-quantity', context).append('<span class="help-block">For orders over 10 call for volume pricing</span>');

    $('.help-block', context).css("flex-basis", "100%"); 


    //code ends


    }

  };

})(jQuery);

為了防止多次處理,您可以使用jquery Once(),但是如果在選擇器中使用context變量,則通常不需要這樣做。jQuery Once()必須加載的單獨庫。


查看完整回答
反對 回復 2021-04-08
  • 3 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號