【问题标题】:Jquery Event handler not working when calling from page从页面调用时,Jquery 事件处理程序不起作用
【发布时间】:2013-09-24 04:24:47
【问题描述】:

我已经编写了一个事件来将数据保存在一个 widget.js 文件中,并且处理程序在页面上。没有错误或异常即将到来,但处理程序没有被调用。请帮忙。

Widget.js:

   (function ($, undefined) {
    $.widget('ui.discussionwidget', {
        options: {
            userID: 'arti.agarwa',
            title: "",
            width: "",
            containerClass: ".ui-content-gutter"
        },
saveData: function (userName, msg, parentID) {
            //Save Discussion History
            $.event.trigger({
                type: "sendMessage",
                userName: userName,
                message: msg,
                parentID: parentID,
                timeStamp: new Date()
            });

        },
        });})(jQuery);

页面脚本:

$(document).ready(function () {
        $('#discussionwidget').live("sendMessage", sendMessageHandler);
                // sendMessage event handler
                function sendMessageHandler(e) {
                    debugger;
                    alert(1);
                }});

【问题讨论】:

  • 你在哪里绑定事件?在 document.ready 内部还是其他地方?我相信这个事件根本不受约束。
  • 第一个函数在 (function ($, undefined) { $.widget('ui.discussionwidget', { options: { userID: 'arti.agarwa', title: "", width: "", containerClass: ".ui-content-gutter" },} 一个小部件
  • 从 $(document).ready(function () {) 调用我已经更新了代码
  • 仅供参考,.live() 已被弃用很长时间。您应该改用 .on() (使用不同的语法)。另外,您确定sendMessage 会传播并因此与您正在使用的委托事件处理一起工作吗?
  • 我使用的是 JQuery1.6,所以不能使用'on'。我在博客中阅读了关于Jquery事件处理并以这种方式实现的,代码中是否有任何错误?

标签: javascript event-handling jquery


【解决方案1】:

看起来事件委托不适用于全局事件

$('#discussionwidget').on("sendMessage", sendMessageHandler);

演示:Fiddle

【讨论】:

  • 我找到了替代解决方案,因为我们使用的是 JQ1.6 并且无法继续使用。代替写它 $.event.trigger 我需要把它写成 $('#discussionwidget').trigger 它就像一个魅力。
【解决方案2】:

我可以看到两个可能的问题:

  1. 您的小部件具有 discussionwidget 类,但您绑定的是 id discussionwidget
  2. 您正在使用 javascript 动态创建小部件?可能是在创建小部件之前绑定了事件。

尝试解决这两个问题。

【讨论】:

  • 它也有一个 ID 作为讨论小部件,所以我很确定这个。第二,是的,我正在动态创建小部件,但我使用“实时”绑定事件处理程序,所以它应该绑定它。不是吗?
  • 不,只有在 文档准备好之前创建小部件时,它才会绑定它。如果不是这种情况,$("#discussionwidget") 将不会返回任何元素。您可以使用alert($("#discussionwidget").length) 进行检查。如果您看到 0,则您的小部件尚未创建并且不会绑定事件。
  • alert($("#discussionwidget").length) : 即将到来 1
  • @user2614405:哦,顺便问一下,你把警报放在哪里了?把它放在绑定事件之前。内部文件准备就绪。
  • @user2614405:很抱歉,我认为对您没有帮助。祝你好运解决问题:)
猜你喜欢
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多