javascript - Jquery 选项卡不工作

标签 javascript jquery html ajax

我的点击功能有一个问题。我创建了这个demo来自 jsfiddle.net。

在此演示中,您可以看到有微笑按钮。当您单击这些按钮时,将会打开一个选项卡。如果您单击选项卡区域中的红色按钮,则该选项卡无法工作,说明出现了问题。

任何人都可以帮助我,问题是什么以及解决方案是什么?

该选项卡像这样正常工作 demo

var response = '<div class="icon_b">
            <div class="clickficon"></div>
                <div class="emicon-menu MaterialTabs">
                    <ul>
                        <li class="tab active"><a href="#starks-panel1"> TAB1</a></li>
                        <li class="tab"> <a href="#lannisters-panel1"> TAB2</a></li>
                        <li class="tab"> <a href="#targaryens-panel1"> TAB3</a><span></span></li>
                    </ul>
                    <div class="panels">
                        <div id="starks-panel1" class="panel pactive"> a </div> 
                        <div id="lannisters-panel1" class="panel"> b </div>
                        <div id="targaryens-panel1" class="panel"> c </div>
                    </div>
                </div>
            </div>';

$(document).ready(function () {

    function showProfileTooltip(e, id) {
        //send id & get info from get_profile.php 
        $.ajax({
            url: '/echo/html/',
            data: {
                html: response,
                delay: 0
            },
            method: 'post',
            success: function (returnHtml) { 
                e.find('.user-container').html(returnHtml).promise().done(function () {
                    $('.emoticon').addClass('eactive');
                });
            }
        });

    }
    $('body').on('click', '.emoticon', function(e) {
    var id = $(this).find('.emoticon_click').attr('data-id');
    showProfileTooltip($(this), id);
});
    $(this).on( "click", function() {
  $(this).find('.user-container').html("");
});
var componentHandler = function() {
  'use strict';

  var registeredComponents_ = [];
  var createdComponents_ = [];

  function findRegisteredClass_(name, opt_replace) {
    for (var i = 0; i < registeredComponents_.length; i++) {
      if (registeredComponents_[i].className === name) {
        if (opt_replace !== undefined) {
          registeredComponents_[i] = opt_replace;
        }
        return registeredComponents_[i];
      }
    }
    return false;
  }

  function upgradeDomInternal(jsClass, cssClass) {
    if (cssClass === undefined) {
      var registeredClass = findRegisteredClass_(jsClass);
      if (registeredClass) {
        cssClass = registeredClass.cssClass;
      }
    }

    var elements = document.querySelectorAll('.' + cssClass);
    for (var n = 0; n < elements.length; n++) {
      upgradeElementInternal(elements[n], jsClass);
    }
  }

  function upgradeElementInternal(element, jsClass) {
    if (element.getAttribute('data-upgraded') === null) {
      element.setAttribute('data-upgraded', '');
      var registeredClass = findRegisteredClass_(jsClass);
      if (registeredClass) {
        createdComponents_.push(new registeredClass.classConstructor(element));
      } else {
        createdComponents_.push(new window[jsClass](element));
      }
    }
  }

  function registerInternal(config) {
    var newConfig = {
      'classConstructor': config.constructor,
      'className': config.classAsString,
      'cssClass': config.cssClass
    };

    var found = findRegisteredClass_(config.classAsString, newConfig);

    if (!found) {
      registeredComponents_.push(newConfig);
    }

    upgradeDomInternal(config.classAsString);
  }

  return {
    upgradeDom: upgradeDomInternal,
    upgradeElement: upgradeElementInternal,
    register: registerInternal
  };
}();




function MaterialTabs(element) {
  'use strict';
  this.element_ = element;
  this.init();
}

MaterialTabs.prototype.Constant_ = {
  MEANING_OF_LIFE: '42',
  SPECIAL_WORD: 'HTML5',
  ACTIVE_CLASS: 'pactive'
};
MaterialTabs.prototype.CssClasses_ = {
  SHOW: 'materialShow',
  HIDE: 'materialHidden'
};

MaterialTabs.prototype.initTabs_ = function(e) {
  'use strict';
  this.tabs_   = this.element_.querySelectorAll('.tab');
  this.panels_ = this.element_.querySelectorAll('.panel');
  for (var i=0; i < this.tabs_.length; i++) {
    new MaterialTab(this.tabs_[i], this); 
  }
};

MaterialTabs.prototype.resetTabState_ = function() {
  for (var k=0; k < this.tabs_.length; k++) {
    this.tabs_[k].classList.remove('pactive');
  }  
};

MaterialTabs.prototype.resetPanelState_ = function() {
  for (var j=0; j < this.panels_.length; j++) {
    this.panels_[j].classList.remove('pactive');
  } 
};

function MaterialTab (tab, ctx) {  
  if (tab) {
    var link = tab.querySelector('a');

    link.addEventListener('click', function(e){
      e.preventDefault();
      var href = link.href.split('#')[1];
      var panel = document.querySelector('#' + href);
      ctx.resetTabState_();
      ctx.resetPanelState_();
      tab.classList.add('pactive');
      panel.classList.add('pactive');
    });   

  }
};


MaterialTabs.prototype.init = function() {
  if (this.element_) {
    this.initTabs_();
  }
}


window.addEventListener('load', function() {
  componentHandler.register({
    constructor: MaterialTabs,
    classAsString: 'MaterialTabs',
    cssClass: 'MaterialTabs'
  });
});
});

最佳答案

我一直在调试你的代码,结果如下:

您正在添加“选项卡”;每当您在该 div 中单击时,此代码都会拦截它:

$('body').on('click', '.emoticon', function(e) {       
    var id = $(this).find('.emoticon_click').attr('data-id');
    showProfileTooltip($(this), id);
});

因此“选项卡”是从头开始重新构建的。

关于javascript - Jquery 选项卡不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32481708/

相关文章:

javascript - 为现有元素添加点击叠加

javascript - 使用 jQuery 过滤图像

javascript - CSS/CSS3 过滤内容,为什么不起作用?

html - 如何使容器内的元素响应?

javascript - 多重铁崩塌不起作用,仅先膨胀

javascript - JavaScript 中的凯撒密码 - 为什么 'A' 在这里变成 '['?

jquery - Handlebars.js 如何与 jQuery 和 Nodejs Express 一起工作?

javascript - 有没有比使用 .live() 更好的方法将事件附加到 AJAX 加载的元素?

php - 跨多个页面的倒计时变量

javascript - 迭代动态数组中的特定字段(例如第 5 个、第 10 个、第 15 个……)