javascript - jQuery 小部件错误 : cannot call methods prior to initialization; attempted to call method

标签 javascript jquery widget

我是编写自定义 jQuery 小部件的新手,并且不断收到错误“无法在初始化之前调用 demowidget 上的方法;尝试在此代码上调用方法“changeColor”。

$.widget('my.demowidget', {
    _create: function () {
        this.element.on('change', 'select[name="color"]', function () {
            $(this).demowidget('changeColor');
        });

        this.createContent();
    },

    createContent: function () {
        var html = '';
        html += '<select name="color">';
        html += '<option value="green">Green</option>';
        html += '<option value="red">Red</option>';
        html += '</select>';
        html += '<div id="the-text">The text</div>';

        this.element.html(html);
    },

    changeColor: function() {
        $('#the-text').css('color', '#' + $('select[name="color"]'));
    }
});

$(document).ready(function () {
    $('#demo').demowidget();
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div id="demo">
</div>

如何解决这个问题,以便 select-change 事件触发 changeColor 函数?

最佳答案

您可以在尝试调用函数之前初始化您的小部件:

$(this).demowidget().demowidget('changeColor');

这里有一个 fiddle :

https://jsfiddle.net/mnfjtdz0/1/

关于javascript - jQuery 小部件错误 : cannot call methods prior to initialization; attempted to call method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56831995/

相关文章:

javascript - 获取MSAL.JS生成的localStorage中的访问 token 并将其放入axios中

Jquery 在新选项卡中打开 (_blank)

javascript - 有没有简单的方法从页面上的 td 元素获取数组? (node.js/cheerio/jQuery)

jquery - jQuery 是否有一个快捷方式允许我一次指定多个属性?

Android - 将 Activity 和小部件绑定(bind)到服务

javascript - Dribbble API 版本 2

javascript - 如何使用 Javascript/Jquery 更改单选按钮的值

php - Javascript document.write(metadata) 对 SEO 有效吗?

css - 透明的官方 Twitter Widget

android - 在 android 主屏幕小部件中添加 Seekbar