繁体   English   中英

使用jQuery触发动态自定义事件

[英]Fire dynamic custom event with jQuery

我在Symfony2项目中正在研究Json / AJAX实现。 一切正常(模式,重定向等),但我的“火灾事件”实施却不起作用。

这是我的代码:

$(document).trigger(data.content, [data.data]);

data.content包含事件的名称,在这种情况下为“ lesson_editor.added_step”,而data.data包含HTML字符串。

我收到错误信息Uncaught TypeError: undefined is not a function jQuery库中Uncaught TypeError: undefined is not a function 使用Chrome调试器,上面的触发器就是导致它的那一行。

如果我将data.content替换为字符串"my.test"它将起作用。

感谢您的帮助。

完整的JSON字符串:

{"type":"event","content":"lesson_editor_added_step","data":"\n    <div class=\"panel\">\n        <div class=\"panel-heading\">\n            <span class=\"panel-title\">\n                <a data-toggle=\"collapse\" data-parent=\"#steps\" href=\"#step25\">\n                    asdfasdfasdf\n                <\/a>\n            <\/span>\n            <div class=\"pull-right\">\n                <a href=\"#\" class=\"btn btn-xs btn-success\" data-toggle=\"tooltip\" title=\"Add action\">\n                    <i class=\"fa fa-plus\"><\/i>\n                <\/a>\n                <a href=\"#\" class=\"btn btn-xs btn-warning\" data-toggle=\"tooltip\" title=\"Edit step\">\n                    <i class=\"fa fa-edit\"><\/i>\n                <\/a>\n                <a href=\"#\" class=\"btn btn-xs btn-danger\" data-toggle=\"tooltip\" title=\"Delete step\">\n                    <i class=\"fa fa-times\"><\/i>\n                <\/a>\n            <\/div>\n        <\/div>\n        <div id=\"step25\" class=\"panel-collapse collapse in\">\n            <div class=\"panel-body\" id=\"actions25\">\n                            <\/div>\n        <\/div>\n    <\/div>\n","flashBag":{"success":["Step added"]}}

AJAX电话

 the URL
 $.ajax({
     url: url,
     type: type,
     data: data,
     beforeSend: this.options.beforeSendCallback
 })
.done($.proxy(function(data) {
    if (data.type === undefined) {
        alert("Ajax data invalid");
        return false;
    }
    // Switch data type
    switch (data.type) {
        case 'modal':
            // Create modal
            $(document).bootstrapModal("createModal", data.content);
            break;
        case 'redirect':
            // Redirect to page
            window.location.replace(data.content);
            break;
        case 'event':
            // Fire a custom event
            $(document).trigger(data.content, [data.data]);
            break;
    }
    // Check if flashbag exists
    if (data.flashBag) {
        $.each(data.flashBag, function(type, messages) {
            $.each(messages, function(index, message) {
                new PNotify({
                    type: type,
                    text: message
                });
            });
        });
    }
    // Fire event
    $(document).trigger('ajax_done', [data.data]);
}), this)
.fail(this.options.failCallback);

最好通过以下方式触发自定义事件:

$(document).trigger(data.content, data.data);

并使用.on事件处理程序捕获它:

$(document).on(data.content, function(event, args...) {
   // do something beneficial for your career here
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM