当相反的情况发生时,撤消一个jQuery事件处理程序的结果

时间:2011-01-20 05:07:29

标签: jquery

我昨天刚开始研究jQuery,之前我只用PHP编程。因此,我可以解释我正在寻找的最佳方式是在jQuery中说“其他”的方法。

假设我有以下内容:

$('input').click(function() {
    $(this).addClass('fieldBorder');
});

我怎么说“输入字段点击时,然后删除类fieldBorder”。我在jQuery中看到很多方法可以做,但是当用户的动作发生时,人们怎么说相反。

另一个例子:

$('a.clickMe').mouseover(function() {
    $('hiddenMessage').show();
});

在上面的示例中,一旦用户停止将鼠标悬停在链接上以使用以下内容,这是隐藏隐藏消息的唯一方法:

$('a.clickMe').mouseout(function() {
    $('hiddenMessage').hide();
});

我感到有一种唠叨的感觉,即有一种更简单/更少冗余的方式。这是“回电”的意思吗?

修改

从答案中我猜测没有简单的方法可以做到这一点。但是我在ajax函数中注意到你有这个:

$.ajax({

type: 'get'
url: 'script.php',
data: 'foo=boo';
success: function() {

alert('it worked');

}, error: function() {

alert('it did not work');

}

})

其中所有其他jQuery代码都存在, something else: function()部分。

3 个答案:

答案 0 :(得分:1)

我认为你想要mouseup事件,尽管你可能想要blur事件。我不确定“点击”是什么意思。

对于mouseover / mouseout,有hover事件可让您配对处理程序。

没有“在'对面'事件(无论可能是什么),请以某种方式运行我刚刚在此处理程序中运行的所有代码的反向”。听起来很有趣! :)

答案 1 :(得分:0)

这不是一个真正的jQuery,而是关于浏览器如何处理事件。

元素可以具有焦点。如果可以,如果也可以失去焦点。元素失去焦点时触发的事件是blur event

根据您所谈论的元素类型,它可能永远不会获得焦点,即使被点击,也可能在不方便的时间失去焦点。在这种情况下,您可能只想听取clicksdocument上的用户<body>,并确定您是否需要做某事。


AJAX successerror处理程序与事件处理不完全相同。在某些特定点上,AJAX请求要么成功要么失败,这是一次if..else。事件更复杂,任何事件都可能随时发生,并且不一定是“相反”的事件。 click的反义词是什么?没有unclick之类的东西。只有click on a different element

关于如何使用这些约束构建特定行为,有一些习惯用法。比如,在点击链接时显示一些元素,并在点击任何不是链接或显示元素的元素时隐藏元素。

例如,您将click事件处理程序附加到document,它将捕获所有点击事件。对于每个触发的事件,您可以确定其target是某个特定元素还是该元素的子元素。

作为替代方案,您必须了解事件冒泡。单击某个元素时,将触发该元素的click事件。然后将触发元素父级的click事件,依此类推,直到达到顶部元素(这也是document捕获所有事件的方式)。
您可以将事件附加到执行某项操作的document。您还会将click事件附加到stops the event from bubbling up的某个特定元素。通过这种方式,您创建了“在点击任何时执行某些操作但特定元素”的效果。

答案 2 :(得分:0)

这是另一种方法。它可以被视为if / else语句以其他方式。

$("#id").hover(function(e){
                //you can do whatever you want on mouseover here.
    },
        function(){
               //you can do whatever you want on mouse out here.
    });