如何将每个函数或方法分配给一个按钮
本文关键字:按钮 一个 分配 方法 函数 | 更新日期: 2023-09-27 17:57:33
注意:我还是编程新手。
我有一个JavaScript页面,当页面加载时会创建切换按钮,但是我现在不能独立使用这些按钮,因为按钮的id是数据库表上的列名。所以我不能事先知道,这就是为什么我不能在每个按钮上分配一个方法或函数。
这就是切换按钮的创建方式:
function createButtons(tbID, tbClass, tbType, tbValue, onClick) {
return ''n<input' + (tbID ? ' id=''' + tbID + '''' : '') +
(tbClass ? ' class=''' + tbClass + '''' : '') +
(tbType ? ' type=''' + tbType + '''' : '') +
(tbValue ? ' value=''' + tbValue + '''' : '') +
(onClick ? ' onclick=''' + onClick + '''' : '') + '>';
}
function DisplayButtons(cableData) {
var newContent = '';
$.each(cableData, function (i, item) {
function toggle() {
$("#tb" + item.CommonCable)
.clicked ? $('#MyElement')
.addClass('clickedButton');
$("#tb" + item.CommonCable)
.removeClass("clickedButton");
$('#MyElement')
.toggleClass('MyClass');
}
newContent += createButtons("tb" + item.CommonCable,
null, "submit", item.CommonCable, toggle());
});
$("#Categories")
.html(newContent);
}
注意:任何可以尽快提供帮助的人,我如何将每个功能或方法分配给每个按钮?:或者我可以使用任何其他方式来创建切换按钮?
您需要这样的东西:
function createButtons(tbID, tbClass, tbType, tbValue, onClick) {
var btn = $('<input>', {id:(tbID ? tbID : ''),
"class":(tbClass ? tbClass : ''),
"type":(tbType ? tbType : ''),
value:(tbValue ? tbValue : ''),
});
if(onClick)
btn.click(onClick);
return btn;
}
function toggle() {
$(this)
.clicked ? $('#MyElement')
.addClass('clickedButton');
$(this)
.removeClass("clickedButton");
$('#MyElement')
.toggleClass('MyClass');
}
function DisplayButtons(cableData) {
var newContent = [];
$.each(cableData, function (i, item) {
newContent.push(createButtons("tb" + item.CommonCable,
null, "submit", item.CommonCable, toggle));
});
$("#Categories").empty()
.append(newContent);
}
查看如何以jquery样式创建按钮。此外,当添加onclick时,应该将指针传递给要在单击时调用的函数,如这里所示:createButtons("tb" + item.CommonCable,
null, "submit", item.CommonCable, toggle)
。当您执行toogle()
时,就像在您的代码中一样,您会立即执行您的函数,该函数返回的值将用作onclick值。另外,还可以看看如何将新创建的按钮添加到数组中,然后使用.append方法将其添加到#categories
元素中。不确定你是否需要.empty,但这将完全像你的.html(newContent)一样工作。如果你在类别中有一些内容应该保留在那里,只需删除empty
UPD此外,请注意,您不需要为每个新按钮创建新的切换功能。如果你像.click(toogle)一样应用它,这个切换函数将始终指向点击的按钮,你不需要使用id来找到它。不确定你的代码中点击了什么。据我所知,jQuery对象并没有类似的东西。
为什么不为创建的每个按钮生成一个唯一的id
?
类似于:
$.each(cableData, function (i, item) {
function toggle() {
$("#tb" + i + item.CommonCable)
.clicked ? $('#MyElement')
.addClass('clickedButton');
$("#tb" + i + item.CommonCable)
.removeClass("clickedButton");
$('#MyElement')
.toggleClass('MyClass');
}
newContent += createButtons("tb" + i + item.CommonCable,
null, "submit", item.CommonCable, toggle());
});
但我认为你走错了方向。
您可以在每个按钮上添加相同的类名,例如:tableButton
,然后为所有具有该类名的元素分配一个事件:
$(".tableButton").on("click", function (event) {
$('#MyElement').addClass('clickedButton').toggleClass('MyClass');
$(this).removeClass("clickedButton");
});
然后,当jQuery准备好时,您可以在没有任何onclick
操作的情况下生成按钮(已经被上一个函数绑定),并且使用类名:
$.each(cableData, function (i, item) {
newContent += createButtons(".tableButton",
null, "submit", item.CommonCable);
});
最后的代码是这样的:
$(function () {
$(".tableButton").on("click", function (event) {
$('#MyElement').addClass('clickedButton').toggleClass('MyClass');
$(this).removeClass("clickedButton");
});
var newContent = "";
$.each(cableData, function (i, item) {
newContent += createButtons(".tableButton",
null, "submit", item.CommonCable);
});
$("#Categories").html(newContent);
});