2011-09-21 53 views
1

我試圖讓我周圍的jQuery插件結構,頭部和冒泡寫道形成幻燈片的開始下面的HTML代碼:JQuery的停止事件從方法調用

<div id="bubble" style="width: 200px; height: 200px; background: #ccc;"></div> 
<script type="text/javascript"> 
jQuery.noConflict(); 
(function($) { 
    $(function() { 
     $(document).ready(function() { 
      $("#bubble").bubble(); 
    }); 
}); 
})(jQuery); 
</script> 

這一點與下面的jQuery插件代碼:

(function($){ 
var i = 0; 

var methods = { 
    mouseup: function(e){ 
     $(this).bubble('next'); 
     e.stopPropagation(); 
    }, 
    mousedown: function(e){ 
     $(this).bubble('next'); 
     e.stopPropagation(); 
    }, 
    next: function(){ 
     console.log(i++); 
    } 
}; 

$.fn.bubble = function(method){ 
    $(this).bind("mouseup", methods.mouseup) 
      .bind("mousedown", methods.mousedown); 

    if (methods[method]) { 
    return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 
    } 
}; 

})(jQuery); 

我不知道爲什麼,但點擊氣泡框調用下的多次迭代:方法。有沒有辦法限制下一個方法的調用次數?

回答

1

您具有約束力mousedownmouseupnext功能,這將發送每次點擊兩條next功能,我不認爲你的意思做。

爲了修復它,刪除其中一個綁定,或者只是綁定click

+0

他說什麼,點擊鼠標由兩部分組成的mousedown的和一個mouseup事件,如果你綁定它會觸發兩次。 jQuery的'點擊'事件應該是足夠的。 – Sander

+0

不,我認爲他沒有正確地阻止傳播 –

+0

http://jsfiddle.net/k3FhM/1/只綁定鼠標移除迭代問題。 –

0

也許你應該使用stopImmediatePropagation(),讓您只需登錄兩次(因爲你調用next()兩次):

(function($){ 
var i = 0; 

var methods = { 
    mouseup: function(e){ 
     $(this).bubble('next'); 
     e.stopImmediatePropagation(); 
    }, 
    mousedown: function(e){ 
     $(this).bubble('next'); 
     e.stopImmediatePropagation(); 
    }, 
    next: function(){ 
     console.log(i++); 
    } 
}; 

$.fn.bubble = function(method){ 
    $(this).bind("mouseup", methods.mouseup) 
      .bind("mousedown", methods.mousedown); 

    if (methods[method]) { 
    return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 
    } 
}; 

})(jQuery); 

小提琴:http://jsfiddle.net/k3FhM/