这个怎么说在jQuery?

时间:2010-09-16 01:14:05

标签: jquery

如果用户的鼠标已经离开了两个html元素(文本字段和跨区块),我想提醒一些事情。我如何在jquery中说 AND ,徒劳无功我试过这样的事情:

if ($('textarea.commentField') && $('span.loginPrompt')).mouseout(function() {
     alert('something');
});

4 个答案:

答案 0 :(得分:7)

你原则上不能这样做,因为这需要一些腿部工作。

这样的东西可行,但必须有更好的解决方案:

var state = {a:false,b:false};
$('.a').mouseenter(enterA);
$('.a').mouseout(exitA);
$('.b').mouseenter(enterB);
$('.b').mouseout(exitB);

function enterA(){ state.a = true }
function exitA(){ state.a = false }
function enterB(){ state.b = true }
function exitB(){ state.b = false }

然后,如果你有jQuery 1.4.2,你可以绑定多个事件,所以在第一个事件之后添加它们。

$('.a,.b').mouseout(function(){ 
//we're outside of both blocks
if( !state.a && !state.b )
{
   //do something
}
});

当你离开A或B时会发射,而你也在另一个之外。我想这就是你的意思。

答案 1 :(得分:3)

如果跨度包含文本字段,则只需要跨度上的处理程序。

如果要将相同的处理程序附加到两个独立元素,请使用:

$('textarea.commentField, span.loginPrompt').mouseout(...)

答案 2 :(得分:1)

这可能会有所帮助:

$('textarea.commentField, span.loginPrompt').mouseout(function() {
     alert('something');
});

答案 3 :(得分:1)

在其他答案的基础上,您可以尝试

(function() {
  var inc = 0;
  var both = false;
  $('textarea.commentField, span.loginPrompt')
    .mouseover(function() {
      inc++;
      if(inc==2) { both = true; }
    })
    .mouseout(function() {
      inc--;
      if(inc == 0 && both) {
        both = false; 
        // do whatever else you wanted here
    });
})();

这与其他基于状态的答案的功能不同,因为只有当鼠标同时位于do whatevertextarea时才会触发span位。 both var跟踪两个元素是否在任何时候都让鼠标进入而不离开。

它包含在一个函数中,因此状态变量不会污染外部命名空间