jQuery - 通过ID启用表单

时间:2013-11-30 23:32:17

标签: javascript jquery backbone.js

我正在使用backbone.js并且我有一个事件附加到一个按钮,该按钮显示附加到所选元素的表单。提交新表单后,它将替换DOM上的文本。

问题是下一次单击原始按钮不会启动菜单。我不确定发生了什么。

          events: {
        'click .editUser': 'edit',
        // 'click #editPerson': 'editPerson',
        'click .deleteUser': 'remove'
    },

    edit: function () {
        menuBar = $("#editPerson"); ///this is my new input form
        console.log(this.model);
        var model = (this.model);
        console.log(model);

        $(this.el).css("background-color", function (index){
            return "rgba(54,42,64, .9)";
        });
        $(".contact-container").css("margin", function (index){
            return "0 5px 100px 0 ";
        })
        $(this.el).append(menuBar);
        console.log($(this.el));
        menuBar.show();


        $("#editPerson").on('submit', function() {
            console.log("hoook");
            var name = $(".edit1").val();
            var address = $(".edit2").val();
            var telephone = $(".edit3").val();
            var email = $(".edit4").val();

            model.set({name: name});
            model.set({address: address});
            model.set({tel: telephone});
            model.set({email: email});
            // $(":button").removeAttr("disabled");
            return false;
        });

    },

1 个答案:

答案 0 :(得分:0)

如果它已经在DOM中,为什么要将#editPerson附加到$ el?这样做是从DOM获取节点并将其附加到$ el中。那有难闻的气味!下次您的视图查找此节点时,如果您删除了上一个视图,它将无法找到它,因为它不再位于DOM中。

如果#editPerson只是表单的模板,您可以检索HTML并将其附加到您的视图中:

this.$el.append($("#editPerson").html())

(此。$ el相当于$(this.el)并且'更快',因为该对象已经存在,当您创建Backbone View时,Backbone会为此分配一个变量。$ el = $(this.el )为方便起见)

然后,您可以在事件哈希中添加'submit #editPerson':'onSubmit'键,并将处理程序代码复制到View中的新onSubmit函数。不需要手动进行绑定,因为Backbone会“注意到”(这不是它的工作原理,Backbone没有看到DOM),新的元素已添加到您的视图中,并且事件将起作用。