修改脚本以使用jQuery创建的DOM对象

时间:2013-05-14 10:20:02

标签: jquery dom

我有一个非常好的功能,模仿“长按”

(function($) {
    $.fn.longClick = function(callback, timeout) {
        var timer;
        timeout = timeout || 500;
        $(this).mousedown(function() {
            timer = setTimeout(function() { callback(); }, timeout);
            return false;
        });
        $(document).mouseup(function() {
            clearTimeout(timer);
            return false;
        });
    };

})(jQuery);

$('#button').longClick(function(){ /* everything I want */ })

此代码适用于所有已存在的项目 但是如果我通过jQuery将这个按钮添加到DOM中,那么这个脚本也不会起作用 这种结构也不适用于longClick,但使用“click”工作正确:

$(document).on('longClick',  "#button",function () {
        /* everything I want */
    });

我该如何解决?

谢谢!

===========
UPD

这是另一个代码,适用于原始元素,但不适用于jQuery添加,但它使用默认方法。

var pressTimer;    
$("#button").mouseup(function(){
  clearTimeout(pressTimer)
  return false;
}).mousedown(function(){
  pressTimer = window.setTimeout(function() {
         /* function */
  },500)
  return false; 
});

2 个答案:

答案 0 :(得分:0)

要使某些代码能够处理未呈现的项目(例如那些最初未添加到DOM中但通过jQuery或其他方法添加的项目),则必须使用http://api.jquery.com/delegate/(。devgate())函数jQuery的。所以不要这样做:

$('#button').on('longClick',  "#button",function () { ...

你需要做

$(document).delegate('#button', 'longclick', function() {...

希望它有所帮助!

编辑1: 试试这样:

$(document).delegate('#button', 'mousedown', function(){
    clearTimeout(pressTimer)
    return false;
});
$(document).delegate('#button', 'mouseup', function(){
    pressTimer = window.setTimeout(function() { /* function */ },500);
    return false;
});

答案 1 :(得分:0)

好的代码是:

var pressTimer
$(document).on("mouseup", "#button", function(){
       clearTimeout(pressTimer)
  // Clear timeout
  return false;
})
$(document).on("mousedown", "#button", function(){
       // Set timeout
  pressTimer = window.setTimeout(function() {
         /* MY SUPER FUNCTION */
  },500)
  return false; 
}  )