问题描述
||
我有两个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
属性相关的功能?
解决方法
这有效
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\')
}
}
}
,尝试将onclick
属性强制转换为string
。然后,您至少可以检查ѭ14ѭ的索引以及它是否为空。之后,您可以轻松地将那些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/
example14方法时的工作示例:http://jsfiddle.net/fAJ6v/3/