【问题标题】:jQuery click on button who have ajax callback doesn't workjQuery单击具有ajax回调的按钮不起作用
【发布时间】:2018-08-09 08:49:15
【问题描述】:

我有一个 Drupal 网站,我创建了一个带有 ajax 回调按钮的表单,回调工作正常,但现在我想在使用单击提交按钮时抛出一个小 javascript 函数。

我不想为这个小功能创建一个单独的文件来与drupal一起使用,所以我尝试使用jquery click元素:

$(document).on('click', '#commerce-checkout-coupon-ajax-wrapper button', function(){
    console.log("test");
});

$('#commerce-checkout-coupon-ajax-wrapper button').on('click', function(){
    console.log("test");
});

但这不起作用,日志没有被触发。所有其他事件(悬停,鼠标输入等)都可以正常工作,但是单击它不起作用,按钮启动对他的 drupal 函数的 ajax 调用,但它没有启动我的 javascript 函数。

我能做什么?我想做的事情是当我们点击按钮时从屏幕上删除一些东西。

编辑:这是表单的html(由drupal生成)

<div id="edit-commerce-coupon--2" class="form-wrapper">
  <div class="form-item form-item-commerce-coupon-coupon-code form-type-textfield form-group"> 
  <label class="control-label" for="edit-commerce-coupon-coupon-code--2">Code Promo</label>
  <input class="form-control form-text" title="" data-toggle="tooltip" type="text" id="edit-commerce-coupon-coupon-code--2" name="commerce_coupon[coupon_code]" value="" size="60" maxlength="128" data-original-title="Saisir le code de votre coupon ici.">
  </div>
  <button type="submit" id="edit-commerce-coupon-coupon-add--2" name="coupon_add" value="Ajouter" class="btn btn-success form-submit icon-before ajax-processed"><span class="icon glyphicon glyphicon-plus" aria-hidden="true"> 
</span> Ajouter</button>

编辑:

我也尝试了另一种可行的方法(我认为),它与 focusout :

 $('#commerce-checkout-coupon-ajax-wrapper .form-control.form-text').focusout(function (e) {
    console.log("test");
    $('.tooltip').remove();
});

问题类似,当我点击按钮时输入没有失去焦点,所以工具提示停留在页面上

【问题讨论】:

  • 可以分享html示例吗
  • 我使用 html 表单编辑我的帖子
  • 添加了 [drupal],因为它可能是一个框架问题。 ajax callback 会自动调用event.stopPropagation()吗?
  • 我不知道,但是 ajax 回调将表单替换为新表单(与另一行相同)也许我的问题可能来自那个?
  • @Jessy 在共享标记中没有具有所述 ID 的元素,您可以检查元素并与 ID 为 commerce-checkout-coupon-ajax-wrapper的元素共享标记

标签: javascript jquery ajax drupal


【解决方案1】:

您可以尝试解决方法:

(function($){
  $(document).ready(function(){
     $('button[id*="edit-commerce-coupon-coupon-add"]').on('click', function(){
         console.log('test');
     });
  });

})(jQuery);

还要确保你已经正确地附加了你的 js 文件以形成

$form['#attached']['js'][] = 'pathtomyfile.js';

【讨论】:

  • 问题是我不想只为一个函数创建一个新的js文件,我可以把它放在我的模板的js文件中吗?我只是看到在我的按钮单击和 ajax 替换之间大约有 1 秒的时间,当 ajax 用新的替换旧表单时,我需要隐藏工具提示,有办法做到这一点吗?
  • 最好使用 Advance Aggregator 模块将 js 和 css 聚合到一个文件中,这样可以创建多个 js 文件,只是为了代码清晰。您想在 ajax 替换期间停用字段吗?
  • 我有工具提示,当我将鼠标悬停在文本输入时会显示,当我单击引发 ajax 替换的按钮时,我想让工具提示消失
  • 它来自 ajax api drupal,因此您可以在本文档中找到一些更改功能的帮助:api.drupal.org/api/drupal/includes%21ajax.inc/group/ajax/7.x
猜你喜欢
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 2013-12-27
  • 2016-05-22
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多