jQuery选项卡不起作用

革新

我的点击功能有一个问题。我已经从jsfiddle.net创建了这个演示

在此演示中,您可以看到有微笑按钮。当您单击这些按钮时,将在该时间打开一个选项卡。如果单击选项卡区域中的红色按钮,则该选项卡不起作用,可能是发生了问题。

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

标签是正常的,就像这个工作演示

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'
  });
});
});
拉迪姆·科勒

更新的工作版本

我们要做的是将目标移动到与图标相同的级别(几乎像tab和content一样)代替这个:

<div class="emoticon">
    <div class="emoticon_click" data-id="1">
        <img src="http://megaicons.net/static/img/icons_sizes/8/178/512/emoticons-wink-icon.png" width="30px" height="30px">
            <div class="user-container" data-upgraded></div>
    </div>

</div>

我们需要这个

<div class="emoticon">
    <div class="emoticon_click" data-id="1">
        <img src="http://megaicons.net/static/img/icons_sizes/8/178/512/emoticons-wink-icon.png" width="30px" height="30px">
            // not a child
            <!--<div class="user-container" data-upgraded></div>-->
    </div>
    // but sibling
    <div class="user-container" data-upgraded></div>    
</div>

如果这是新的HTML配置,我们可以更改处理程序

  1. 定位点击div "emoticon_click"
  2. 更改同级(非子级)div“用户容器”的内容

待替换的旧代码

$('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("");
});

现在将被替换为:

//$('body').on('click', '.emoticon', function(e) {
$('body').on('click', '.emoticon_click', function(e) {
    // clear all user container at the begining of this click event
    $('body').find('.user-container').html("");

    // find id
    var id = $(this).attr('data-id');

    // find the parent, which also contains sibling
    // user-container
    var parent = $(this).parent()

    // let the target be initiated
    showProfileTooltip($(parent), id);
});

$(this).on( "click", function() {
    //$(this).find('.user-container').html("");
});

这里检查它的作用

注意:真正有趣的注释是在此答案中通过pinturic

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery选项卡不起作用

来自分类Dev

jQuery tabselect在单击选项卡时不起作用

来自分类Dev

jQuery UI选项卡beforeLoad preventDefault不起作用

来自分类Dev

jQuery UI选项卡效果不起作用

来自分类Dev

jQuery UI选项卡选择方法不起作用

来自分类Dev

jQuery选项卡不起作用或引用错误?

来自分类Dev

jQuery UI选项卡beforeLoad preventDefault不起作用

来自分类Dev

jQuery选项卡ui不起作用

来自分类Dev

jQuery tabselect在单击选项卡时不起作用

来自分类Dev

选项卡的keyCode不起作用

来自分类Dev

Emacs选项卡不起作用

来自分类Dev

引导选项卡不起作用

来自分类Dev

jQuery和语法荧光笔在动态加载的选项卡上不起作用

来自分类Dev

使用jquery动态添加时,选项卡不起作用

来自分类Dev

jQuery和语法荧光笔在动态加载的选项卡上不起作用

来自分类Dev

jQuery和CSS图像居中在选项卡中不起作用

来自分类Dev

JQuery-ui选项卡-重新加载带有全新内容的页面不起作用

来自分类Dev

jQuery选项卡不起作用-没有错误

来自分类Dev

jQuery FormValidation在Bootstrap multi选项卡中不起作用

来自分类Dev

python硒phantomJS新选项卡不起作用

来自分类Dev

单击事件在选项卡上不起作用

来自分类Dev

PyDev:插入空格的选项卡不起作用

来自分类Dev

twitter-bootsrap上的选项卡不起作用

来自分类Dev

QTabWidget:关闭选项卡按钮不起作用

来自分类Dev

Bootstrap中的选项卡导航不起作用

来自分类Dev

Bootstrap.js选项卡不起作用

来自分类Dev

引导选项卡导航不起作用

来自分类Dev

Bootstrap导航选项卡“显示”不起作用?

来自分类Dev

响应式选项卡引导不起作用