【问题标题】:How to create a custom event in jquery? [closed]如何在 jquery 中创建自定义事件? [关闭]
【发布时间】:2012-11-03 07:42:30
【问题描述】:

如何在 jquery 中创建自定义事件?我想创建一个选择绘制事件。这样我就可以用我的事件替换这个插件JQuery Image Annotation 上的添加注释按钮。我希望能够像绘制矩形选择区域一样直接绘制注释,我该怎么做?请指导。

我已经这样做了,但我的问题是我不知道如何定义我想调用 ondraw 的自定义事件,我的意思是我想知道的是,如何定义基本 jquery 事件?任何骨架或示例肯定会有所帮助,而且我是新手,所以我需要一些指导,我还找到了一段代码来创建矩形, 代码:

     $(function(){
var $container = $('#container');
var $selection = $('<div>').addClass('selection-box');

$container.on('mousedown', function(e) {
    var click_y = e.pageY;
    var click_x = e.pageX;

    $selection.css({
      'top':    click_y,
      'left':   click_x,
      'width':  0,
      'height': 0
    });
    $selection.appendTo($container);
    $container.on('mousemove', function(e) {
        var move_x = e.pageX,
            move_y = e.pageY,
            width  = Math.abs(move_x - click_x),
            height = Math.abs(move_y - click_y);

        $selection.css({
            'width':  width,
            'height': height
        });
        if (move_x < click_x) { //mouse moving left instead of right
            $selection.css({
                'left': click_x - width
            });
        }
        if (move_y < click_y) { //mouse moving up instead of down
            $selection.css({
                'top': click_y - height
            });
        }
    }).on('mouseup', function(e) {
        $container.off('mousemove');
        $selection.remove();
    });
});

});

【问题讨论】:

  • 你可以检查插件源代码,或者打开浏览器检查器找到id并定位它,你可以做很多事情,似乎这个问题有点模糊...... “我想要能够像绘制矩形选择区域一样直接绘制注释” -- 听起来很简单,但可能并非如此;我的建议:先尝试一下,如果遇到具体问题再回帖。
  • @elclanrs 对不起,我想我不够具体,是的,我正在这样做,我在上面添加了我的问题。

标签: jquery plugins custom-event


【解决方案1】:

看看触发和绑定here。 在代码中触发事件

// Trigger event on selection draw
$(document).trigger('onSelectionDraw')

然后绑定到事件

$(document).bind('onSelectionDraw', function() {
    // do stuff
});

【讨论】:

    【解决方案2】:

    从来没有向我推荐在 jQuery 对象中创建自定义事件作为创建我自己的“事件”的合适方式。相反,我总是被指向任何一个:

    • 带有回调的函数,在我的脚本中的特定断点处调用,使用我自己的代码模拟事件。
    • 创建一些通用事件处理程序并使用 jQuery .trigger() 方法触发事件
    • 如果事件已存在,请使用您自己的事件处理程序解除绑定并重新绑定。

    回调函数示例

    function myCustomEvent(callback)
    {
        // Do something
    
        // If callback is a function call it
        typeof callback === 'function' && callback();
    }
    

    很久以后,在遥远的星系中

    // You have a function that loads JS asyncronously
    // but want to know each time it is fired. asyncLoad()
    // Also accepts a callback as a parameter
    asyncLoad('/js/myJs.js', function()
    {
        console.log('myJs asyncronously loaded');
    
        // Script is loaded, run our event
        myCustomEvent(function()
        {
            console.log('myJs event complete');
        });
    });
    

    在那个例子中,在 asyncLoad() 函数中触发您的自定义事件会更有意义,但为了展示它是如何工作的,我认为这会做到。

    你的代码:

    当在 jQuery 对象上调用插件时,一个事件会绑定到该按钮。这很可能是一次“点击”,但值得通过源代码查找实际触发的事件。

    粗略看来,解除绑定和重新绑定似乎是最好的操作,假设您还可以找到它创建的按钮的 id。 (或者有一个简单的方法来选择它作为一个 jQuery 对象)。

    $('#createdButton').unbind('click')
        .click(function(e)
        {
            // New event handling code
        });
    

    请注意,如果插件使用冒泡事件,例如.on,则此方法可能不起作用。在这种情况下,您需要 stopPropagation() 为原始事件处理程序中的元素或父级。或者,事件绑定到的低级 DOM 元素上的 unbind() 也可以工作。

    【讨论】:

    • 有人可以帮忙重新提出这个问题吗?我急需这方面的帮助。我已经将我的问题编辑得更具体。thanx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多