为什么主干视图触发更改事件两次

Why backbone view fires change event twice?

本文关键字:事件 两次 视图 为什么      更新时间:2024-04-13

我的主干视图为:

var aView = Backbone.view.extend({
    events: {
        'change #select-opr': 'changeOperation'
    },
    initialize: function () {},
    render: function () {},
    changeOperation: function () {
        console.log("event triggered.");
    }
});

更改事件与选择下拉列表相关联。

<select name="operation" id="select-opr" style="height: 29px;">
    <option>Select an Attribute</option>
    <option value="method">Method</option>
    <option value="project">Project</option>
</select>

当我更改select选项时,我会在console.log中获得两个带有'event triggered'的日志。这意味着事件会被触发两次。为什么会这样?

以前有人发现这个问题吗?我犯了什么错误??

这是Javascript中常见的Bug。你可以在网上找到很多文章,特别是关于被解雇两次事件的SO。我不是Backbone的粉丝,但在jquery中,你可以尝试这样的

 $(document).on('click', '#task-list li', function(e)
 {
       alert('Hellow world');
       e.stopPropagation();
       return false;
 });

这肯定是Javascript的问题,因为如果你在谷歌上搜索事件触发两次,你会发现Angular、Jquery和主干网等都在某个地方触发事件两次甚至三次。所以,这背后似乎是javascript。当然,如果你用Mozilla开发者网络搜索这个,你可以看到专家也这么说

我不确定您想要实现什么,但您应该将changeOperation绑定到所选选项而不是选择吗?