我有两个HTML表单按钮,每个按钮都有一个onclick操作。
<input type=button name=sel value="Select all" onclick="alert('Error!');">
<input type=button name=desel value="Deselect all" onclick="alert('Error!');">
不幸的是,此操作会不时发生变化。它可以是
onclick="";>
或
onclick="alert('Error!');"
或
onclick="checkAll('stato_nave');"
我正在尝试编写一些javascript代码来验证调用的函数是什么,并在需要时进行更改:
var button=document.getElementsByName('sel')[0];
// I don't want to change it when it is empty or calls the 'checkAll' function
if( button.getAttribute("onclick") != "checkAll('stato_nave');" &&
button.getAttribute("onclick") != ""){
//modify button
document.getElementsByName('sel')[0].setAttribute("onclick","set(1)");
document.getElementsByName('desel')[0].setAttribute("onclick","set(0)");
} //set(1) and set(0) being two irrelevant function
不幸的是,这都不起作用。 回过头来,我注意到了
alert( document.getElementsByName('sel')[0].onclick);
不会像我预期的那样输出onclick内容,但输出:
function onclick(event) {
alert("Error!");
}
因此我认为比较因此失败,我无法将function
与string
进行比较。
有没有人猜测如何区分哪个函数与onclick
属性相关联?
答案 0 :(得分:0)
这有效
http://jsfiddle.net/mplungjan/HzvEh/
var button=document.getElementsByName('desel')[0];
// I don't want to change it when it is empty or calls the 'checkAll' function
var click = button.getAttribute("onclick");
if (click.indexOf('error') ) {
document.getElementsByName('sel')[0].onclick=function() {setIt(1)};
document.getElementsByName('desel')[0].onclick=function() {setIt(0)};
}
function setIt(num) { alert(num)}
但为什么不将onclick移动到脚本
window.onload=function() {
var button1 = document.getElementsByName('sel')[0];
var button2 = document.getElementsByName('desel')[0];
if (somereason && someotherreason) {
button1.onclick=function() {
sel(1);
}
button2.onclick=function() {
sel(0);
}
}
else if (somereason) {
button1.onclick=function() {
alert("Error");
}
}
else if (someotherreason) {
button1.onclick=function() {
checkAll('stato_nave')
}
}
}
答案 1 :(得分:0)
尝试将onclick
属性转换为string
。然后你至少可以检查checkAll
的索引以及它是否为空。之后,您可以轻松地将这些input
元素绑定到新的onclick
函数。
var sel = document.getElementsByName('sel')[0];
var desel = document.getElementsByName('desel')[0];
var onclick = sel.getAttribute("onclick").toString();
if (onclick.indexOf("checkAll") == -1 && onclick != "") {
sel.onclick = function() { set(1) };
desel.onclick = function() { set(0) };
}
function set(number)
{
alert("worked! : " + number);
}
工作示例:http://jsfiddle.net/fAJ6v/1/
有checkAll
方法时的工作示例:http://jsfiddle.net/fAJ6v/3/