为了账号安全,请及时绑定邮箱和手机立即绑定

防止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 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号