31

I want to handle click event on an iframe with a handler that gets the iframe’s id as parameter.

I’m able to add an onClick event handler via JavaScript as follows and it works fine:

iframe.document.addEventListener('click', clic, false);

But in this case I’m unable to pass a parameter to clic(). I tried to print this.id in clic() but no result.

onClick HTML attribute does not work at all, the handler is not called.

<html>
<head>
<script type="text/javascript">
function def() {
    myFrame.document.designMode = 'on';
}
function clic(id) {
    alert(id);
}
</script>
</head>
<body onLoad="def()">
<iframe id="myFrame" border="0" onClick="clic(this.id)"></iframe>
</body></html>
1
  • 1
    as commented by deepi in an answer: your code (what you gave on top) is working fine. But it's working when you click exactly on the border not in side box Commented May 20, 2015 at 1:22

2 Answers 2

31

iframe doesn't have onclick event but we can implement this by using iframe's onload event and javascript like this...

function iframeclick() {
document.getElementById("theiframe").contentWindow.document.body.onclick = function() {
        document.getElementById("theiframe").contentWindow.location.reload();
    }
}


<iframe id="theiframe" src="youriframe.html" style="width: 100px; height: 100px;" onload="iframeclick()"></iframe>

I hope it will helpful to you....

Sign up to request clarification or add additional context in comments.

3 Comments

it works only if the current website has the same protocol of the iframe (not working if one is http and the other one is https)
Defeats the purpose of using an iframe if this doesn't work across domains.
19

You can use closures to pass parameters:

iframe.document.addEventListener('click', function(event) {clic(this.id);}, false);

However, I recommend that you use a better approach to access your frame (I can only assume that you are using the DOM0 way of accessing frame windows by their name - something that is only kept around for backwards compatibility):

document.getElementById("myFrame").contentDocument.addEventListener(...);

6 Comments

thanks wladimir....u solved half of my prblm...but still this.id is nt working. if i pass "hello world" then it gets printed but for this.id it says "undefinied" in the alert box:S
Right, that's because you added the listener to the document - and the document doesn't have an ID. You probably want to add it to the <iframe> element instead, like in your first example: document.getElementById("myFrame").addEventListener(...);
Can you assign that event even when iframe is from different scope?
@FlashThunder: No, you generally cannot intercept clicks on frames from a different security context (if you could that would be a security issue).
there is no .contentDocument method for me. What am I missing?
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.