为bind()添加参数

时间:2011-12-07 09:57:45

标签: jquery parameters bind

  

可能重复:
  Passing parameters to click() & bind() event in jquery?

我有这段代码,

clickcount = 0;

   function filter() {

            $(this).siblings().unbind('click', filter);
            $(this).siblings().css({opacity: '0.3'}, 800);
            clickcount++;

            if(clickcount == 2){
                $(this).siblings().bind('click', filter);
                 $(this).siblings().css({opacity: '1'}, 800);
                 clickcount =0;
            }


   }

        $('a.one').bind('click', filter);
        $('a.two').bind('click', filter);
        $('a.three').bind('click', filter);

我想要做的是,将参数传递给'过滤器'函数,这样我就可以动态传递数据。

例如,这就是我在PHP中的表现: -

function test(var) { 
    return $var;
}

echo test('this is a variable');

如何使用bind获得类似的结果?

4 个答案:

答案 0 :(得分:1)

bind() documentation所示,bind()的第二个参数可以是任意数据地图,可以使用event.data

在事件处理程序中访问
function filter(e) {
         // e.data.foo; etc

         $(this).siblings().unbind('click', filter);
         $(this).siblings().css({opacity: '0.3'}, 800);
         clickcount++;

         if(clickcount == 2){
              $(this).siblings().bind('click', filter);
              $(this).siblings().css({opacity: '1'}, 800);
              clickcount =0;
         }
}

$('a.one').bind('click', {
    blah: 1,
    foo: 2
}, filter);

或者,您可以这样做;

$('a.one').bind('click', buildFilter(1, 2, 3));

function buildFilter(argA, argB, argC) {
  return function (e) {
    // Use argA, argB and argC

    $(this).siblings().unbind('click', filter);
    $(this).siblings().css({opacity: '0.3'}, 800);
    clickcount++;

    if(clickcount == 2){
      $(this).siblings().bind('click', filter);
      $(this).siblings().css({opacity: '1'}, 800);
      clickcount =0;
    }
  }
}

答案 1 :(得分:0)

为什么不呢

$('a.one').bind('click', function () {
    filter(aaa, bbb); 
});

答案 2 :(得分:0)

检查.bind()文档上的传递事件数据:

.bind( eventType [, eventData], handler(eventObject) )

示例:

var message = 'Spoon!';
$('#foo').bind('click', {msg: message}, function(event) {
  alert(event.data.msg);
});

你可以这样做:

commentbtn.bind('click', { id: '12', name: 'Chuck Norris' }, function(event) {
    var data = event.data;
    alert(data.id);
    alert(data.name);
});

查看Sstackoverflow上已有的thread以获取详细信息。

$(this).siblings().bind('click',{id:1, cost:20}, filter);

function filter(event)
{
alert(event.data.id);
}

答案 3 :(得分:0)

您应该能够将事件数据传递给函数调用

$('a.one').bind('click', {msg: message}, filter);

然后在您的过滤器函数中,您可以通过执行event.data.msg

来检索事件数据
function filter () {
  ....
  alert(event.data.msg);
}

查看绑定事件数据

上的jquery绑定文档

http://api.jquery.com/bind/#passing-event-data