Javascript функция щелчка - PullRequest
3 голосов
/ 18 марта 2010

У меня есть код, который отлично работает в IE, но, к сожалению, не в Google Chrome / Firefox.

Он основан на вызове события click () для кнопки из javascript.Читая вокруг, кажется, что это расширение, специфичное для IE (doh).Есть ли способ сделать подобное в Chrome + Firefox?Для пояснения, он выполняет событие нажатия для определенной кнопки, а не обрабатывает то, что происходит, когда пользователь нажимает кнопку.

Спасибо

Код для тех, кто его запрашивал:

function getLinkButton(actionsDiv)
{
    var hrefs = actionsDiv.getElementsByTagName("a");
    for (var i=0; i<hrefs.length; i++)
    {
        var id = hrefs[i].id;
        if (id !=null && id.endsWith("ShowSimilarLinkButton"))
        {
            return hrefs[i];
        }
    }
    return null;
}

function doStuff()
{
  //find the specific actions div... not important code...
  var actionsDiv = getActionsDiv(); 
  var linkButton = getLinkButton(actionsDiv);

  if (linkButton != null)
  {
    if (linkButton.click)
    {
        linkButton.click();
    }
    else
    {
        alert("Cannot click");
    }
  }
}

Я действительно не хочу использовать jQuery, если в этом нет крайней необходимости

Ответы [ 4 ]

2 голосов
/ 18 марта 2010

Я думаю, что вы ищете element.dispatchEvent:

function simulateClick() {
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);
  var cb = document.getElementById("checkbox"); 
  var canceled = !cb.dispatchEvent(evt);
  if(canceled) {
    // A handler called preventDefault
    alert("canceled");
  } else {
    // None of the handlers called preventDefault
    alert("not canceled");
  }
}

Я прочитал ваш вопрос как «Я пытаюсь запустить событие onclick для моей кнопки», тогда как все остальные, кажется, прочитали его как «Я пытаюсь обработать событие onclick для моей кнопки». Пожалуйста, дайте мне знать, если я ошибаюсь.

Изменяя ваш код, правильная реализация x-браузера может быть такой:

if (linkButton != null) 
{ 
  if (linkButton.fireEvent) 
    linkButton.fireEvent("onclick"); 
  else 
  { 
    var evt = document.createEvent("MouseEvents");
    evt.initMouseEvent("click", true, true, window,
                               0, 0, 0, 0, 0, false, false, false, false, 0, null);
    linkButton.dispatchEvent(evt);
  } 
} 
1 голос
/ 18 марта 2010

атрибут onclick должен быть перекрестным:

<input type="button" onclick="something()" value="" />

РЕДАКТИРОВАТЬ

И возник вопрос, который, кажется, примерно такой же: setAttribute, onClick и кросс-браузерная совместимость

0 голосов
/ 18 марта 2010

вы можете использовать атрибут onClick или, если вам нужно больше функциональности, взгляните на jQuery и предлагаемые им события: http://api.jquery.com/category/events/

0 голосов
/ 18 марта 2010

OnClick = "methodcall ();" у меня работает нормально ...

...