jQuery的:.toggle()犯规正确两种不同元素的工作(jQuery: .toggle() d

2019-10-29 03:17发布

这是我的标记:

<table class="col1table" cellspacing="0" cellpadding="0">
   <tr>
      <td><a class="tips_trigger" href="#"><img src="/img/design/icon_tips_venn.png" /></a></td>
      <td><a class="facebook_trigger" href="#"><img src="/img/design/icon_facebook.png" /></a></td>
      <td><a class="twitter_trigger" href="#"><img src="/img/design/icon_twitter.png" /></a></td>
      <td><a class="myspace_trigger" href="#"><img src="/img/design/icon_myspace.png" /></a></td>
   </tr>
   <tr>
      <td><a class="tips_trigger" href="#">TIPS EN VENN</a></td>
      <td><a class="facebook_trigger" href="#">FACEBOOK</a></td>
      <td><a class="twitter_trigger" href="#">TWITTER</a></td>
      <td><a class="myspace_trigger" href="#">MYSPACE</a></td>
   </tr>
</table>

这是加价的工具提示:

<div id="message_tips" class="toolTip">Lorem ipsum dolor sit amet.<br /><br /><br /><br /><br /><br />Lorem ipsum dolor sit amet.</div>

这是我的代码隐藏/为.tips_trigger取消隐藏工具提示(工具提示有ID:“#message_tips”)。 请注意,有上表中的每一行的一个.tips_trigger。 而且会有每个“..._触发级”一个提示。

$('.tips_trigger').toggle(function(event){
  event.preventDefault();
    $('#message_tips').css('display', 'block');
  }, function(event){
    $('#message_tips').css('display', 'none');
});

我有两个问题:
1.每个tips_trigger类的似乎工作的脚本independatly。 我的意思是,如果我在第一行中单击tips_trigger,它会显示工具提示。 如果我直后的第二行中单击tips_trigger,它再次显示工具提示。 我必须按完全相同的tips_trigger级istance两次,它遮住。 我怎样才能解决这个问题?
2.每个“..._触发‘ - 班都会有一个工具提示,不只是’.tips_trigger”。 有没有办法来改变我目前的脚本,使其适用于多种取消隐藏/隐藏,而不是写每类中的一个脚本?

亲切的问候,
马吕斯

Answer 1:

这不是完全清楚你想要什么,但这里有一个改进的例子,(我认为)修复您的两个问题: http://www.jsfiddle.net/fSrLz/

你不应该使用.toggle()函数的点击处理程序,你应该使用它的显示/隐藏功能。 适用于所有,你可以做$(".tips_trigger, .facebook_trigger, etc...')也可以使用像票友选择$("[class$=_trigger")这意味着选择所有,它的类属性用“_trigger”)结束。

下面是从例子中,我修改了JS:

$('[class$=_trigger]').click(function (event) {
    event.preventDefault();
    $('#message_tips').toggle();
});


Answer 2:

用于处理多个刀头会是这样一个优雅的解决方案:

  1. 修改提示触发喜欢的东西:
    <li><a href="#tooltip_type2" class="tooltip-trigger">Type 1 triggger</a></li>
    <li><a href="#tooltip_type2" class="tooltip-trigger">Type 2 trigger</a></li>

  2. 修改你的工具提示是这样的:

<div id="tooltip_type1" class="tooltip_content">Content for type 1</div>
<div id="tooltip_type1" class="tooltip_content">Content for type 2</div>

  1. 修改JavaScript来:
    $(".tooltip_trigger").click(function() {
    var target = $(this).attr('href');
    var tooltip_state = 0;
    if(tooltip_state) { $(".tooltip_content").css("display", "none"); }
    $(target).css("display", "block");
    tooltip_state = 1; return false; });

这就是我不与任何语法或者说,我很可能使对方失误困扰的本质。 这既解决了你的问题。



Answer 3:

我使用的输入来源:查理布朗,木孔德和bcherry做出这样的:

标记触发器:

<td><a class="tooltrigger" href="#tip1"><img src="/img/design/icon_tips_venn.png" /></a></td>
<td><a class="tooltrigger" href="#tip2"><img src="/img/design/icon_facebook.png" /></a></td>

标记提示:

<div id="tip1" class="tooltip">Lorem Ipsum Donor ist.<br /><br /><br /><br /><br /><br />Lorem Ipsum Donor ist.</div>
<div id="tip2" class="tooltip">Facebook Lorem Ipsum Donor ist.<br /><br /><br /><br /><br /><br />Facebook Lorem Ipsum Donor ist.</div>

脚本:

$('.tooltrigger').click(function(event){
     event.preventDefault();
     $(
          '.tooltip' + $(this).attr('href')
     ).toggle().siblings().hide();
});

该脚本测试,效果很好,但任何进一步的建议表示赞赏。



Answer 4:

我有一个类似的问题。 我想叫了slideDown()上的一个div被点击以下两种不同的元素时。

我所做的是使在要素之一了slideDown()函数,当您单击第二个元素则触发第一个元素上的click事件。

是这样的:

$('#gallery_toggle').toggle(function() {
    $('#gallery_slide').slideDown();
}, function() {
    $('#gallery_slide').slideUp();
});

$('#another_gallery_toggle').click(function(){
    $('#gallery_toggle').trigger('click');
});

希望帮助!



Answer 5:

$('a.tips_trigger').click(function(event){
    event.preventDefault();
    if ($('#message_tips').css('display') == 'block'){
        $('#message_tips').hide();
    }
    else {
        $('#message_tips').show();  
    }
});


文章来源: jQuery: .toggle() doesnt work properly on two different elements