2016-02-04 113 views
0

你好我试图触发视图事件后视图里面的一些DOM修改初始化函数骨干,触发查看事件

编辑:对不起,我的问题,目前还不清楚。这里是完整的代码示例。最后,我发现我在添加课程之前触发了变化事件......感觉如此愚蠢,但我挣扎了好几个小时! 感谢您的支持!

<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

然后,你应该要求更多的代码,以确保是这种情况。这只是一个假设......您不能使用OP提供的信息来创建类似*的语句“您试图使用尚未在DOM中的元素触发事件”*。你应该投票结束这个问题 –