2012-12-18 118 views
3

我創建了一個jQuery插件,這是觸發事件:jQuery的事件觸發 - 取消事件

$.fn.myplugin = function(options) { 
    this.on("foo.myplugin", options.foo); 
    this.on("bar.myplugin", options.bar); 
}; 

我要檢查,如果富已被用戶取消,並防止被觸發條:

// trigger foo 
this.trigger("foo.myplugin"); 

// how do I check if foo was canceled 
if(!fooCanceled) { 
    this.trigger("bar.myplugin"); 
} 

我該如何檢查foo是否被取消以防止被觸發?

jQuery UI的做一些與此類似,但是當我試圖不工作:

if (this._trigger("search", event) === false) { 
    return; 
} 

我想類似這樣的東西:

if(this.trigger("foo.myplugin") === false) { 
    return; 
} 

this.trigger("bar.myplugin"); 

但酒吧仍然被觸發。

我初始化我的插件像這樣:

$("#asdf").myplugin({ 
    foo: function(event) { 
     // cancel the event 
     event.preventDefault(); 
    }, 

    bar: function(event) { 
     console.log("should not be triggered"); 
    } 
}); 
+0

你嘗試'this._trigger( 'foo.myplugin')===假'? –

+0

我的印象是_trigger是jQuery UI,我不使用它。我只是用他們的代碼作爲例子。 – Dismissile

+0

你能定義什麼被用戶*取消了嗎? – rae1

回答

3

根據這一模式可能讓你完成你以後。

例子:http://jsfiddle.net/VzzLf/3/

JS

//Plugin structure from : http://docs.jquery.com/Plugins/Authoring 
(function($){ 

    var methods = { 
    init : function(options) { 

     return this.each(function(){ 
      var ele = $(this); 

      ele.on('click.myPlugin', function(e){ 

       //Hold a reference to the event 
       var event = $.Event("closing") 

       //Trigger it on the element 
       ele.trigger(event); 

       //Check to see if it was disabled 
       if(!event.isDefaultPrevented()){ 
        ele.trigger('close'); 
       } 

      }); 

     }); 

    } 
    }; 

    $.fn.myPlugin = function(method) { 

    if (methods[method]) { 
     return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 
    } else if (typeof method === 'object' || ! method) { 
     return methods.init.apply(this, arguments); 
    } else { 
     $.error('Method ' + method + ' does not exist on jQuery.myPlugin'); 
    }  

    }; 

})(jQuery); 

    $(function(){ 
     $('#myPlugin') 
      .myPlugin() 
      .on('closing', function(){ 
      alert('closing');  
      }) 
      .on('close', function(){ 
      alert('close fired');  
      }); 
     $('#myPluginDisabled') 
      .myPlugin() 
      .on('closing', function(e){ 
       alert('Disable close'); 
       e.preventDefault(); 
      }) 
      .on('close', function(e){ 
       alert('Will never get here'); 
      });  
    }); 
​ 

HTML

<div id='myPlugin'>Click me I'm enabled</div> 

<div id='myPluginDisabled'>Click me I'm disabled</div>​ 
+0

這就是我一直在尋找的。 – Dismissile