2013-05-15 49 views
-1

我有下面的代碼,當用戶點擊向上和向下時,返回'哈哈'。我遇到了這個問題,但是這個次數被重新調整了。第一次點擊上/下,'哈哈'只返回一次。第二次,我經歷了這個,它被打印兩次。第三次,'哈哈'打印3次,依此類推。有關爲何發生這種情況的任何建議?我只想'哈哈'每打印一次就打印一次。如何解決mouseup和mousedown問題?

   $(".test").mousedown(function(){ 
       $(".test").mouseup(function(){ 
        console.log('haha'); 

        }); 
       }); 
+1

爲什麼不使用'click'? –

回答

2

你可以使用one,使事件處理鼠標鬆開後綁定:

  $(".test").mousedown(function(){ 
      $(".test").one('mouseup', function(){ 
       console.log('haha'); 

       }); 
      }); 

但似乎簡單到只需使用點擊:

$(".test").click(function(){ console.log('haha') }); 
+1

有趣的解決方法,但它不是基本問題的解決方案,第二個事件處理程序只是每次你打到第一個處理程序時重新定義..一旦很好,但不應該是解決方案...只是代碼它是正確的,它將與已編寫的代碼一起工作^^ – jebbie

+1

@jebbie事實上,由於我沒有得到奇怪的OP代碼的目的,我真的不知道什麼是真正的*問題。 –

+1

你是指'one()',而不是'once()'? – Ian

2

你加入每次點擊鼠標時都會有一個新的mouseup事件處理程序。你可能想分開這兩個,或者只是使用mouseup處理程序。

0

問題是,在您的代碼中,您每次用戶單擊時都會添加「mouseup」處理程序。您不需要等待mousedown事件來添加此處理程序;你應該可以從頭開始添加它。如果你真的想確保鼠標按下了第一個觸發,使用一個布爾值,像這樣:

var mouseClicked = false; 

$(".test").mousedown(function(){ 
    mouseClicked = truel 
}).mouseup(function(){ 
    if (mouseClicked ==true){ 
     console.log('haha'); 
    } 
}); 
1

這是因爲每個觸發mousedown事件時,一個新的mouseup事件添加到目標元素。 在mouseup事件觸發時立即再次移除mouseup事件,您的問題將得到解決。