【问题标题】:checking each div in page and change value according to the data in the div检查页面中的每个 div 并根据 div 中的数据更改值
【发布时间】:2019-07-12 17:14:32
【问题描述】:

我有通过显示套件创建的按钮(按钮包含“加入”文本,我需要运行功能检查以查看值应该是加入还是离开。 你可以找到我的 js 代码和我的检查函数代码。我的问题是我认为我以错误的方式调用函数。

function init() {
$('div').each(function(){
  $ajax('checkteam')
   .then(function(){
     if (res.data === true){
        var button = $(this).find('.button.pulse');
        $(button).text === 'Leave';
        $(button).data('leave', true);
     }
     else {
          }
        }       
   )  
})
}

'checkteam' => array(
  'type' => MENU_CALLBACK,
  'page callback' => 'card_generator_check_team_ajax',
  'page arguments' => array(2),
  'access arguments' => array('access content'),
),


function card_generator_check_team_ajax($term_name) {
global $user;
$term = reset(taxonomy_get_term_by_name($term_name));
$tid = $term->tid;
$user_fields = user_load($user->uid);
$arrlength = (sizeof(($user_fields->field_teams[und])));
for($x = 0; $x < $arrlength; $x++) {
$mytid = ($user_fields->field_teams[und])[$x]['tid'];
if ($tid == $mytid){
return true;
}
return false;
 }
}

我需要从 checkteam 函数中获取数据,如果它为 true,那么该值应该是 leave。

【问题讨论】:

  • then 回调中,您会收到ajax 响应。 .then(function(){ 应该是 .then(function(res){
  • 在没有数据发送时为每个 div 发送请求没有意义。意味着所有请求都是相同的,因此有多个请求是多余的
  • @charlietfl 每个 div 包含不同的团队,所以我需要检查每个团队!
  • 很好,但是如果您不将团队特定的数据发送到服务器,那就没有意义了。您没有在显示的内容中发送任何内容。除此之外,您还真的没有确定具体问题是什么
  • 但是每个按钮都是不同的,所以每个请求都应该不同(通过更改 url 或发送数据)...否则为所有人发出一个请求

标签: javascript php jquery drupal drupal-7


【解决方案1】:

您的帖子看起来像是 PHP 和 JavaScript 的疯狂组合。以下是我可能建议的一些基本更改。

  $("div", context).each(function(i, el) {
    var termName = $(".field-name-title .field-item", this).text().trim();
    $.get(Drupal.settings.setProject.ajaxUrlcheck + "/" + termName,
      function(res){
        if (res === "false") {
          $(".button.pulse", el).html("Leave");
        }
      }
    );
  });

.each() 迭代每个元素,这样就可以得到索引和元素。您可以使用$(el).find('.button.pulse')$(".button.pulse", el) 在jQuery 中选择合适的元素。

如果您需要进一步的帮助,请发帖a Minimal, Reproducible Example

希望这会有所帮助。

【讨论】:

  • each(function(i, el)中的i有什么用
  • @FirasAyari 我还没用它,它是每个元素的索引。
【解决方案2】:

这是我现在的代码,但它有一个问题是始终执行一次,而不是每次执行(视图行)。我将在图片中附上我的布局。

(function ($) {
Drupal.behaviors.card_generator = {
attach: function (context, settings) {
    $('.views-row', context).each(function(){
       var button = $(this).find('.button.pulse'),
      termName = $(this).find('.field-name-title .field-item');

        $.ajax({
            url: Drupal.settings.setProject.ajaxUrlcheck + '/' + 
$(termName).text(), 
            method: "GET",
          })
                     .then(function(res){
         if (res === 'true'){
        $(button).text('Leave');            
                     }

    }
            )  
    })
}
};
})(jQuery);

【讨论】:

    【解决方案3】:

    问题解决了! php函数出错了。

    function card_generator_check_team_ajax($term_name)
    {
      global $user;
      $term = reset(taxonomy_get_term_by_name($term_name));
      $tid = $term->tid;
      $user_fields = user_load($user->uid);
    
      $arrlength = (sizeof(($user_fields->field_teams[und])));
      for ($x = 0; $x < $arrlength; $x++) {
        $mytid = ($user_fields->field_teams[und])[$x]['tid'];
        if ($tid == $mytid) {
          $arr = 'true';
          continue;
        }
      }
      drupal_json_output($arr);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 2013-07-24
      • 2015-02-07
      • 2018-01-15
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多