2010-03-18 2 views
3

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

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

Благодаря

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

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, если это абсолютно необходимо

+0

пожалуйста показать код, потому что 'click' событие работает на Chrome, Firefox, .. –

+0

@nvl: Я думаю, что он хочет отправьте обработчик события «щелчок», установленный на кнопке. –

ответ

2

Я думаю, что вы ищете 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 для моей кнопки». Пожалуйста, дайте мне знать, если я ошибаюсь.

Изменение кода, надлежащее осуществление х-браузер может быть:

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); 
    } 
} 
+0

функция кликButton (элемент) { если (элемент.click) { элемент.click(); } else if ("fireEvent" in element) { element.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); element.dispatchEvent (evt); }} Это функция я получил благодаря своему коду, не работает на Firefox, однако, но работает на хроме сейчас ... –

+0

Я думаю, что немного fireEvent является бит, который делает его работу в Chrome .. –

+0

@Gordon: 'fireEvent' также работает в IE, поэтому вы можете покончить с' click() '. Я оставил ссылку на 'element' в коде, который я хотел изменить на' linkButton' - 'element.dispatchEvent (evt);' должен быть 'linkButton.dispatchEvent (ЭВТ); ' –

0

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

0

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

Смежные вопросы