Сравните действие по нажатию двух кнопок HTML, используя JavaScript - PullRequest
2 голосов
/ 25 мая 2011

У меня есть две кнопки HTML Form, с каждой из которых связано действие 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?

Ответы [ 2 ]

0 голосов
/ 25 мая 2011

Попробуйте привести атрибут 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/

0 голосов
/ 25 мая 2011

Это работает

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)}

Но почему бы не переместить клик на скрипт

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')
    }
  }
}
...