Создание событий в JavaScript, подобных C#

#c# #javascript

#c# #javascript

Вопрос:

Я в основном пишу код на C #. Тем не менее, я работаю с некоторым JavaScript. Я определил класс в JavaScript, как показано здесь:

 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? Спасибо!

Комментарии:

1. Смысл событий в C # заключается в том, чтобы некоторый контейнер мог «прослушивать» событие и обрабатывать его извне. Какой контейнер вы собираетесь использовать для прослушивания этого события? Какой объект на вашей странице является подписчиком?

Ответ №1:

 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();
  

Ответ №2:

вы можете создавать пользовательские события в 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>
  

Ответ №3:

Используйте пользовательское определение события в javascript

Пользовательские события Javascript

Ответ №4:

Если вы предпочитаете использовать 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
 }
}