1

序言:我是意大利人,对不起我的英语不好。

这是我的问题:

我想为一组按钮分配一个功能。

我需要向函数发送一个参数。

这是我尝试过的代码:

function test(atxt) {
    var buttons = $('.tblButton');

    for (var i = 0; i < buttons.length; i++) {
        buttons[i].onClick(sayHello(atxt));
    }
}

function sayHello(txt){alert('hello' + txt)};

...收到以下错误:

Uncaught TypeError: Object #<HTMLButtonElement> has no method 'onClick'

你能告诉我哪里出错了,我该如何解决?

编辑:我需要迭代,因为我需要按钮的 'id 作为函数的参数,所以我需要做buttons[i].onClick(sayHello(buttons[i].id))

4

3 回答 3

5
buttons[i].onClick(sayHello(atxt));

应该是

$(buttons[i]).on('click', function() { sayHello(atxt) });

如果您想获取当前按钮 ID,那么我认为您正在寻找这个..

for (var i = 0; i < buttons.length; i++) {
     $(buttons[i]).on('click', function() { sayHello(this.id) });
}
于 2012-12-14T17:10:28.060 回答
1

如果要遍历所有按钮,则必须使用.each()jquery 的处理程序:

$(function(){
  $(".tblButton").each(function () {
    $(this).click(function(){
       alert($(this).attr('id'));
    }); 
  });
});

签出 jsbin:http: //jsbin.com/usideg/1/edit

于 2012-12-14T17:40:52.927 回答
0

这对您的示例不起作用:您是否有其他迭代原因?

function test(atxt) {
    $('.tblButton').on('click',function(){sayHello(atxt);});
}

function sayHello(txt){alert('hello' + txt)};

或者,如果元素是静态的并且存在,则可选:

function test(atxt) {
    $('.tblButton').click(function(){sayHello(atxt);});
}

function sayHello(txt){alert('hello' + txt)};

替代方法:只需更改为这种样式:

var txt = "fred";
var atext = "hello" + txt;

function sayHello(atext) {
    alert(atext);
}
$('.tblButton').on('click', function() {
    sayHello(atext);
});
//below here just to demonstrate
$('.tblButton').eq(0).click();//fires with the fred
txt = "Johnny";// new text
atext = 'hello' + txt;
$('.tblButton').eq(1).click();//fires the Johnny

看到它在这里工作:http: //jsfiddle.net/dFBMm/

所以根据你的笔记:这个标记和代码:

<button class="tblButton" id="Ruth">Hi</button>
<button class="tblButton" id="Betty">Hi again</button>

$('.tblButton').on('click', function() {
    alert("Hello "+$(this).attr("id"));
});
$('.tblButton').eq(0).click();//fires with the Ruth
$('.tblButton').eq(1).click();//fires the Betty

http://jsfiddle.net/dFBMm/1/

于 2012-12-14T17:16:08.323 回答