Jquery将侦听器绑定到类

时间:2012-10-02 10:56:12

标签: javascript jquery html5 web

我有一个HTML文档,其中包含以下标记:

<div class="sign"></div>

我想用代表标志视图的画布替换这些标签 (用户可以触摸并绘制) 所以我把听众绑定了。

问题是只有第一个画布具有侦听器并且可以绘制它。

$(document).ready(function () {


    $('.sign').each(function () {


        var canvas = $("<canvas/>");
        canvas[0].width = 200;
        canvas[0].height = 100;
        canvas[0].setAttribute("style", "border:1px solid #000000");

        var ctx = canvas.get(0).getContext('2d');
        ctx.strokeStyle = "rgba(0,0,0,1)";
        ctx.lineWidth = 2;
        ctx.lineCap = 'round';

        $(this).append(canvas);


        canvas.bind("touchstart", function () {

            ctx.moveTo(event.touches[0].pageX, event.touches[0].pageY);
        });

        canvas.bind("touchmove", function () {
            ctx.lineTo(event.touches[0].pageX, event.touches[0].pageY);
            ctx.stroke();
        });

        var br = $("<br/>");
        $(this).append(br);

        var btn = document.createElement('input');
        btn.setAttribute("type", "button");
        btn.setAttribute("value", "Clear");
        btn.setAttribute("onclick", "clearSignature()");

        $(this).append(btn);

    });

});

如何将这些听众绑定到所有画布?

感谢。

1 个答案:

答案 0 :(得分:0)

我会删除bind循环中的each(),我只需在其后附加处理程序(使用事件委托),例如

$('body')
  .on("touchstart", 'canvas', function () {
    var ctx = this.getContext('2d');
    ctx.moveTo(event.touches[0].pageX, event.touches[0].pageY);
  })
  .on("touchmove", 'canvas', function () {
    var ctx = this.getContext('2d');
    ctx.lineTo(event.touches[0].pageX, event.touches[0].pageY);
    ctx.stroke();
  });

假设应使用var ctx = this.getContext('2d');

检索上下文