Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
How to trigger event programmatically?
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  3 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
kj  
View profile  
 More options Aug 9 2004, 11:41 am
Newsgroups: comp.lang.javascript
From: kj <so...@987jk.com.invalid>
Date: Mon, 9 Aug 2004 15:41:57 +0000 (UTC)
Local: Mon, Aug 9 2004 11:41 am
Subject: How to trigger event programmatically?

How does one trigger an event programmatically?  I'm interested in
how to do this in both the "Level 0" event model as well as in the
DOM Level 2 event model.

Thanks!

kj
--
NOTE: In my address everything before the first period is backwards;
and the last period, and everything after it, should be discarded.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Michael Winter  
View profile  
 More options Aug 9 2004, 3:46 pm
Newsgroups: comp.lang.javascript
From: "Michael Winter" <M.Win...@blueyonder.co.invalid>
Date: Mon, 09 Aug 2004 19:46:33 GMT
Local: Mon, Aug 9 2004 3:46 pm
Subject: Re: How to trigger event programmatically?
On Mon, 9 Aug 2004 15:41:57 +0000 (UTC), kj <so...@987jk.com.invalid>  
wrote:

> How does one trigger an event programmatically?  I'm interested in
> how to do this in both the "Level 0" event model as well as in the
> DOM Level 2 event model.

With a conforming browser, dispatching an event is trivial: it's built  
into the event model. It will even result in performing the default action  
associated with that event and the target element. For example:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en" dir="ltr">
<head>
   <meta http-equiv="Content-Type"
     content="text/html; charset=iso-8859-1">
   <meta http-equiv="Content-Script-Type" content="text/javascript">

   <title>Dispatching events</title>

   <script type="text/javascript">
     /* Add the event listener */
     function init() {
       var elm = null;

       if(document.getElementById) {
         elm = document.getElementById('test');
       }
       if(elm && elm.addEventListener) {
         elm.addEventListener('click', function() {
           alert('Level 2 listener activated');
         }, false);
       }
     }

     /* Dispatch a click event into the document tree
      *
      * Note: I would have called this function fireEvent, or
      *       dispatchEvent, however, this would have resulted in the
      *       browser-supplied functions (former in IE, latter in DOM-
      *       compliant browsers) being called. Be sure to avoid that.
      */
     function doEventDispatch() {
       var evt = null,
           elm = null;

       if(document.getElementById) {
         elm = document.getElementById('test');
       }
       if(document.createEvent) {
         evt = document.createEvent('MouseEvents');
       }
       if(elm && elm.dispatchEvent && evt && evt.initMouseEvent) {
         evt.initMouseEvent(
           'click',
           true,     // Click events bubble
           true,     // and they can be cancelled
           document.defaultView,  // Use the default view
           1,        // Just a single click
           0,        // Don't bother with co-ordinates
           0,
           0,
           0,
           false,    // Don't apply any key modifiers
           false,
           false,
           false,
           0,        // 0 - left, 1 - middle, 2 - right
           null);    // Click events don't have any targets other than
                     // the recipient of the click
         elm.dispatchEvent(evt);
       }
     }
   </script>
</head>

<body onload="init()">
   <div>
     <a id="test" href="http://www.google.com/"
       onclick="alert('Level 0 listener activated');">Test</a>
   </div>
   <div style="margin-top: 1em">
     <button type="button"
       onclick="doEventDispatch()">Dispatch event</button>
   </div>
</body>
</html>

As you can see, clicking the link or the button results in exactly the  
same response from the browser, though the click event generated from the  
link will have co-ordinates set, rather than zeros (0). Be aware that  
every parameter must be specified in the init<type>Event methods,  
otherwise the event won't be initialised properly and will result in an  
exception.

Of course IE will have none of this. Whilst you can dispatch artificial  
events into the document tree (using Element.fireEvent), only listeners  
will be dispatched. Actions associated with that event will not be  
performed.

As for listeners set through HTML attributes or object properties, this  
too is limited. The most you can do here is call the listeners on each  
element. However, to do this, you'll probably need to have DOM support in  
order to get a reference to the target element (unless you can use one of  
the standard collections). If you want to allow the event to bubble up  
into parent elements, you'll also need to have DOM support (so you can use  
Node.parentNode). And, just like with IE, you cannot get the browser to  
perform any actions associated with an element.

So, as you can see, only the DOM approach offers real functionality.  
Unfortunately, it is only subset of browsers. As such, make sure that you  
thoroughly feature test (like I've done above) before deploying code on  
the Web.

Hope that helps,
Mike

--
Michael Winter
Replace ".invalid" with ".uk" to reply by e-mail


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Grant Wagner  
View profile  
 More options Aug 9 2004, 3:59 pm
Newsgroups: comp.lang.javascript
From: Grant Wagner <gwag...@agricoreunited.com>
Date: Mon, 09 Aug 2004 19:59:13 GMT
Local: Mon, Aug 9 2004 3:59 pm
Subject: Re: How to trigger event programmatically?

kj wrote:
> How does one trigger an event programmatically?  I'm interested in
> how to do this in both the "Level 0" event model as well as in the
> DOM Level 2 event model.

> Thanks!

> kj

To trigger an event you basically just call the event handler for that
element:

<a href="#" onclick="alert('Link One onclick!');return false;">Link
One</a>
<a href="#" onclick="document.links[0].onclick();return false;">Link
Two</a>

Alternatively you can use dispatchEvent() <url:
http://www.mozilla.org/docs/dom/domref/dom_el_ref36.html#1028419 /> and
fireEvent() <url:
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/fir...>.

--
Grant Wagner <gwag...@agricoreunited.com>
comp.lang.javascript FAQ - http://jibbering.com/faq


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »