苦苦于动态创建事件处理程序

时间:2015-02-26 11:59:29

标签: javascript jquery magicsuggest

我有一个用户可以输入工作经验的页面。这是通过Cocoon和Simple Forms添加动态表单来完成的。

每次添加新表单时,我都会运行一个函数,以某种形式在某个<input>上实例化Magicsuggest:

function add_company_autocomplete(element) {
    company_magicsuggest = $(element).magicSuggest({});

    // show or hide the fields on form instantiation
    show_hide_logo_upload(company_magicsuggest, element);

    // show or hide the fields as input value changes
    $(company_magicsuggest).on('selectionchange', function() {
        show_hide_logo_upload(company_magicsuggest, element);
    });
}

此函数依次绑定事件处理程序show_hide_logo_upload(),以查找Magicsuggest字段内容的更改。

我的问题是事件处理程序都共享一个指向同一company_magicsuggest对象的指针。每次运行上面的函数时,它都会用新对象覆盖company_magicsuggest,因此,事件处理程序都引用同一个对象,并且无法按照我的要求对不同的对象进行操作。

如何编写add_company_autocomplete()以便将新创建的Magicsuggest实例传递给事件处理程序?

1 个答案:

答案 0 :(得分:0)

我有一个解决方案,但我觉得它只是回避问题而不是解决问题。

function add_company_autocomplete(element) {
    $($(element).magicSuggest({})).on('selectionchange', function() {
        show_hide_logo_upload(this, element);
    }).trigger('selectionchange');
}