gpt4 book ai didi

javascript - Jquery 选项卡不工作

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:08 25 4
gpt4 key购买 nike

我有一个关于点击功能的问题。我创建了这个 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'
});
});
});

最佳答案

updated and working version .

我们要做的是将目标移动到与图标相同的水平(几乎像选项卡和内容)。而不是这个:

<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“user-container”的内容

旧代码将被替换

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

检查 action here

注意:真正有趣的注释在这个 Answer by pinturic

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com