如何更改代码以使用表而不是正文?

时间:2014-12-15 15:51:58

标签: javascript jquery html css

我是jquery的新手,我尝试过手工研究,但没有发现任何有用的东西。我正在尝试做的是将代码从整个机构更改为在单个特定表上工作,我不确定如何去做。代码的作用是这样的:当你点击屏幕时会打开一个弹出窗口,如果你再次点击它就会关闭它。我试着简单地将“body”改为“table”,当我点击桌子但它不会关闭时它会打开。

这是jquery:

$(document).ready(function(){
     $("body").click(function(){
          $(".overlay, .popup").fadeToggle(); 
}); 
});
</script>

这是CSS:

<style type="text/css">
html,
body {
    height: 100%;
}
.overlay {
    position:absolute;
    display:none; 

    /* color with alpha transparency */
    background-color: rgba(0, 0, 0, 0.7);

    /* stretch to screen edges */
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}
.popup {
    position: absolute;
    width: 300px;
    height: 150px;
    display: none;
    background-color: white;
    text-align: center;

    /* center it ? */
    top: 50%;
    left: 50%;
    margin-left: -150px;
    margin-top: -75px;
}
</style>

这是HTML:

<div class="overlay"></div>
<div class="popup">Some popup text</div>
<p>Some content text (click anywhere to toggle overlay)</p>

Jsfiddle:

http://jsfiddle.net/vgg6q8uL/

以下是我尝试过的代码:

这是jquery:

$(document).ready(function(){
     $("table").click(function(){
          $(".overlay, .popup").fadeToggle(); 
}); 
});
</script>

这是CSS:

<style type="text/css">
html,
body {
    height: 100%;
}
.overlay {
    position:absolute;
    display:none; 

    /* color with alpha transparency */
    background-color: rgba(0, 0, 0, 0.7);

    /* stretch to screen edges */
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}
.popup {
    position: absolute;
    width: 300px;
    height: 150px;
    display: none;
    background-color: white;
    text-align: center;

    /* center it ? */
    top: 50%;
    left: 50%;
    margin-left: -150px;
    margin-top: -75px;
}
</style>

这是HTML:

<div class="overlay"></div>
<div class="popup">Some popup text</div>
<p>Some content text (click anywhere to toggle overlay)</p>

<table width="50" height="50" bgcolor="red">
<tr>
<td>
click on me
</td>
</tr>
</table>

这是jsfiddle:

http://jsfiddle.net/k6L6x3yv/

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

希望这是有道理的。发生的事情是覆盖层会覆盖所有内容,但覆盖层仍在体内,因此它可以与正在设置的物体配合使用。

相反,只需这样做.overlay也会切换。

http://jsfiddle.net/vgg6q8uL/2/

$(document).ready(function(){
    $(".activator, .overlay").click(function(){
          $(".overlay, .popup").fadeToggle(); 
    }); 
});

答案 1 :(得分:2)

当您将jQuery单击更改为表格时,叠加层不会丢失的原因是叠加层覆盖表格;因此使它无法点击。您可以bind对覆盖进行click事件,以使覆盖淡出淡出。看看这个小提琴:http://jsfiddle.net/vgg6q8uL/6/

答案 2 :(得分:1)

DEMO

$(document).ready(function(){
     $("table,.overlay, .popup").click(function(){
          $(".overlay, .popup").fadeToggle(); 
    }); 
});

答案 3 :(得分:1)

您需要在fadeIn()fadeOut()之间拆分功能,因为每种功能的触发器都不同。尝试在叠加层上设置fadeOut(),如下所示:

   $("table").on('click', function () {
        $(".overlay, .popup").fadeIn();
        $(".overlay").on('click', function () {
            $(".overlay, .popup").fadeOut();
            $(this).off();
        });
    });

这是一个例子:jsfiddle 此外,使用.on('click',...)优先于.click(...),因为我可以使用.off()轻松删除事件侦听器,并防止在不必要时侦听它。

答案 4 :(得分:1)

我认为这正是您所寻找的:http://jsfiddle.net/vgg6q8uL/9/

仅在桌面上点击弹出窗口并在任何地方点击隐藏。

$(document).ready(function(){
     $("table").click(function(){

          $(".overlay, .popup").fadeToggle(); 
         return false;
     }); 
    $("body").click(function () {
        if($(".popup:visible").length > 0)
        {
            $(".overlay, .popup").fadeToggle(); 
        }

    });
});