2011-11-06 62 views
1

我主要在C#中編寫代碼。不過,我正在使用一些JavaScript。我已經在JavaScript中定義的類,如下所示:用JavaScript創建事件,如C#

function Item(id, name) { 
    this.ID = id; 
    this.Name = name; 

    // define event submitCompleted 
    this.submit = function() { 
     // When the submission is completed, fire "submitCompleted" event. 
    }; 
} 

我的挑戰是,我不知道如何創建和在JavaScript火災自定義事件。如果這是C#,我會執行以下操作:

public class Item 
{ 
    public string ID { get; set; } 
    public string Name { get; set; } 

    public Item(string id, string name) 
    { 
    this.ID = id; 
    this.Name = name; 
    } 

    public event EventHandler SubmitCompleted; 
    public void Submit() 
    { 
    // Submission logic 
    SubmitCompleted(this, EventArgs.Empty); 
    } 
} 

如何在JavaScript中執行相同操作?謝謝!

+0

在C#的活動的要點是使一些容器可以「聽」到事件和外部處理。你打算用什麼容器來聽這個活動?你的頁面中的什麼對象是用戶? –

回答

3
function Item(id, name, submitCompleted) { 
    this.ID = id; 
    this.Name = name; 
    this.submitCompleted = submitCompleted; 

    // define event submitCompleted 
    this.submit = function() { 
     // When the submission is completed, fire "submitCompleted" event. 
     // we are passing 2 arguments to the callback: id and name 
     submitCompleted(id, name); 
    }; 
} 

var item = new Item(1, 'some name', function(id, name) { 
    alert('id = ' + id + ', name = ' + name); 
}); 
item.submit(); 
+0

+1這可以修改爲處理多個處理程序 – hungryMind

0

,你可以在這樣的JavaScript創建自定義事件.....

<script type="text/javascript"> 
function Event() 
{ 
    this.eventHandlers = new Array(); 
} 

Event.prototype.addHandler = function(eventHandler){ 
this.eventHandlers.push(eventHandler); 
} 

Event.prototype.execute = function(args){ 

    for(var i = 0; i < this.eventHandlers.length; i++) 
    { 
    this.eventHandlers[i](args); 
    } 
} 

function showName() 
{ 
    alert("My name is stikiflem."); 
} 

function getFaveMovie(arg) 
{ 
    alert("My favourite movie is: " + arg + "."); 
} 

function test() 
{ 
    //create event 
    myHandler = new Event(); 

    //add handler 
    myHandler.addHandler(showName); 
    myHandler.addHandler(getFaveMovie); 

    //raise event 
    myHandler.execute("Ghost in the Shell"); 
} 

</script> 
<body> 
<input type="button" value="Click to create and execute events" 
onClick="test()" /> 
</body> 
0

如果你更喜歡使用jQuery那麼它很容易

//to register an event 
$(selector).bind('customEvent', eventHandler) 

// to raise an event 
$(selector).trigger('customEvent') 

如果你在尋找簡單的JS方式,然後

var newObj = function(){ 
var submitHdlr = []; 
this.bind = function(handler){ 
    submitHdlr.push(handler); 
} 
this.submit = function(){ 
    // do something 
    for(i in submitHdlr) 
    i(); // raise each handler 
} 
}