Closed Bug 281699 Opened 20 years ago Closed 20 years ago

dispatchEvent of onclick event to a link does not invoke the href

Categories

(Core :: DOM: Events, defect)

x86
Windows XP
defect
Not set
normal

Tracking

()

RESOLVED WONTFIX

People

(Reporter: gibson.becky, Unassigned)

Details

Attachments

(1 file)

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b) Gecko/20050130
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b) Gecko/20050130

In Mozilla 1.7.2 if I dispatched an onclick event to an <a> element, the href
for the element would be invoked.  In this build it is not.  I have to
specifically have an onclick handler.  
Given the following code and JavaScript:

<a href="javascript:alert('goto next link');" id="nextLink" >Next &gt; </a>

<script>
var theLink=document.getElementById("nextLink");
var mClick = document.createEvent("MouseEvents");
mClick.initEvent("click",true, true);
theLink.dispatchEvent(mClick);
</script>


Reproducible: Always

Steps to Reproduce:
1.create a link on the page
2.catch some key sequence - my example uses alt and left/right arrow
3.when key squence is received - dispatch a click event to the link element

Actual Results:  
the link is not invoked.  

Expected Results:  
onclick dispatched to an <a> element should invoke the href. I don't want to add
an onclick handler because the default behavior of clicking on the link is changed.

I have an example file but don't see where I can attach.  Here is the code:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<title>Dispatch Event Example</title>
<script language="javascript">
//<![CDATA[
var isIE = false;
if (navigator.userAgent.indexOf("MSIE") != -1) {
	isIE = true;
}
function keySequence(e) {
	var evt = (e != null) ? e : ((event) ? event : null);  // Mozilla will include
e parameter
	var key= evt.keyCode;
	var bCtrl = evt.ctrlKey;
	var bAlt = evt.altKey;
	var bDispatch = (key == 37 || key == 38 || key == 39 || key == 40);
	if ( (bCtrl == true  || bAlt == true ) && bDispatch == true) {
		var theLink = null;
		// invoke the onclick of the associated next(39) or prev(37) button on the page
		if (key == 37 && bCtrl)  { // do previous
			theLink = document.getElementById("prev");
		}
		else if (key == 39 && bCtrl) {  // do next
			theLink = document.getElementById("next");
		}
		else if(key == 38 && bAlt ) {
			theLink = document.getElementById("prevLink");
		}
		else if (key == 40 && bAlt ) {
			theLink = document.getElementById("nextLink");
		}
		if (theLink != null) {
			if (theLink.click) {
				theLink.click();
				//var ieClick = document.createEventObject();
				//theLink.fireEvent("onclick",ieClick);
			}
			else {
				var mClick = document.createEvent("MouseEvents");
				mClick.initEvent("click",true, true);
				theLink.dispatchEvent(mClick);
				alert("did Moz dispatch"); // so I know code was  reached
			}
		}
	}
	return true;
}
//]]>
</script>
</head>
<body onkeyup="keySequence(event);">
<H2>Dispatch Event Example</h2>
<p>This example shows how to dispatch an event in IE or Mozilla.  Press
ctrl-left arrow to invoke the previous button.
Press ctrl-right arrow to invoke the next button. For demonstration purposes the
buttons just invokve a message box with the
intended action rather than navigating away from this page.  Press alt-up to
invoke the previous link and alt-down
to invoke the next link.</p>
<p>Note that invoking the links programmatically via alt-up/ alt-down using 
fireEvent() does not work in IE.
Mozilla will execute the href when an anchor tag receives an onclick event.  I
could not find away to
get IE to execute the anchor tag href via an onclick, onkeypress, onmouseup or
onmousedown via fireEvent - but, I can use linkElement.click() in IE. .  </p>
<div><span style="float:left;"><button onclick="javascript:alert('goto
previous');" id="prev">&lt; Previous</button><br />
&lt;<a href="javascript:alert('goto previous link');" id="prevLink">
Previous</a></span>
<span style="float:right;"><button onclick="javascript:alert('goto next');"
id="next" >Next &gt; </button>
<br /><a href="javascript:alert('goto next link');" id="nextLink" >Next &gt;
</a></span>
</div>
<br/><br /><br/>
</body>
</html>
Summary: dispatchEvent of onclick event to a link does not invoke the href → dispatchEvent of onclick event to a link does not invoke the href
Untrusted events are no longer allowed to trigger links, for security reasons. 
See bug 265176.

If you need this functionality, I believe you can request the
UniversalBrowserWrite capability... then your events will be trusted.

Status: UNCONFIRMED → RESOLVED
Closed: 20 years ago
Resolution: --- → WONTFIX
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: