2016-02-04 8 views
0

Привет Я пытаюсь вызвать событие после просмотра некоторых дом модификации внутри вида инициализации функциюМагистральная, вид триггера событий

Edit: Извините за мой вопрос, не было ясно. Здесь полный образец кода. В конце я понял, что я запускал событие изменения, прежде чем добавлять класс. Чувствую себя настолько глупым, но я изо всех сил пытался часами! Благодарим вас за поддержку!

<script src="https://code.jquery.com/jquery-1.12.0.js"></script> 
    <script src="http://underscorejs.org/underscore.js"></script> 
    <script src="http://backbonejs.org/backbone.js"></script> 
    <script type="text/javascript"> 
    var App = {}; 

    (function($) { 

     App.FormView = Backbone.View.extend({ 
       events: { 
        "change .autofill" : "autofill" 
       }, 

       initialize : function() { 
        _.bindAll(this, "autofill"); 

        this.formelements = {"input" : {"autofill" : true}}; 

        for(var elementId in this.formelements){ 
         if(this.formelements[elementId].autofill){ 
          var $el = $("#"+elementId); 
          //$el.trigger("change").addClass("autofill")//does not work trigger before class added :-(
          $el.addClass("autofill").trigger("change"); 
         } 
        } 
       }, 

       autofill : function(e){ 
        console.log("ok"); 
       } 
     });  

     App.init = function(containerId){ 
      new App.FormView({el : "#"+containerId}); 
     } 
    })(jQuery); 
    </script> 


    <div id="container"> 
     <input type="checkbox" id="input" /> 
    </div> 
    <script type="text/javascript"> 
     App.init("container"); 
    </script> 
+0

Добро пожаловать в StackOverfow. В чем вопрос? Если вы получите какую-либо ошибку, вставьте ошибку. Вы не можете просто добавить исходный код и считаете, что кто-то поймет, что вы имеете в виду? – Aminadav

+0

Что именно вы подразумеваете под * «не работает» * ..? Что такое 'elementId' ..? Нам нужно, чтобы структура DOM даже удостоверилась, что такой элемент существует. Пожалуйста, поделитесь [mcve] –

ответ

1

Вы пытаетесь вызвать событие для элемента, еще не находящегося в DOM. Это не сработает, вам придется запускать свое событие после отображения представления.

Я не знаю точно, как вы рендеринга, но считают this

var View = Backbone.View.extend({ 

    events: { 
    'change input': 'autofill' 
    }, 

    render: function() { 
    this.$el.html('<input>'); 
    this.$('input').trigger('change'); 
    }, 

    autofill: function(e) { 
    console.log('ohai thar'); 
    } 

}); 

var view = new View({ 
    el: $('#root') 
}); 
view.render(); 

Когда событие срабатывает на элемент, который добавляется к документу он получает подобран.

+0

Почему, по-вашему, элемент еще не в DOM ..? –

+0

@TJ Поскольку OP говорит, что он не работает, и я не вижу никакой другой причины, почему он не должен работать, чем '$ (" # "+ elementId)', возвращающий пустой набор. – ivarni

+1

Тогда вы должны попросить больше кода, чтобы убедиться, что это так. Это просто предположение ... Вы не можете сделать утверждение, например: «Вы пытаетесь инициировать событие на элементе, который еще не находится в DOM» *, с информацией, предоставленной OP. Вы должны голосовать, чтобы закрыть вопрос, а не –