2

I am trying to pass a JavaScript function with an onclick event in php. The problem I am facing is that the function that I need to pass has a parameter that needs to be in double quotes as follows:

onclick="removeElement("div8")"

Now when I use JavaScript to generate the parameter it comes out fine, but whenever I use an echo function in php, the following happens when I look at the function in the browser

onclick="removeElement(" div8")"

the code I am using to generate this is:

echo '<div><img src="img.png" alt="image" onclick="removeElement("div'.$x.'")" /></div>';

where $x is the number to be added to the parameter.

Is there a way that the function is returned as a whole and not get the space in between?

7 Answers 7

9

This is happening because you have quotes inside quotes. This will not work, and breaks the HTML parser. It is seeing the onclick as removeElement(, and then it sees an attribute called div8")".

Try this:

echo '.....onclick="removeElement(&quot;div'.$x.'&quot;)"...';

HTML entities are parsed inside attributes, so the result will be your working code.

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

1 Comment

For single quotes use &#39; For double quotes use &quot; @niet a big thank you.
2

Change your echo to this:

echo '<div><img src="img.png" alt="image" onclick="removeElement(\'div'.$x.'\')" /></div>';

Comments

2

You must escape quotes in javascript. Instead of

onclick="removeElement("div8")"

you should write

onclick="removeElement(&quot;div8&quot;)"

Comments

1

try escaping your single-quotes

echo '<div><img src="img.png" alt="image" onclick="removeElement(\'div'.$x.'\')" /></div>';

2 Comments

what are you talking about? You are escaping the quotes in javascript, not HTML.
when viewed from the browser the HTML will show with the \ still in the function thus will not work
1

As long as you do not use any spaces in the attribute value you can ommit the quotes around the html attribute values. All browsers will handle that fine. So you can write:

onclick=removeElement("div8")

You could also use the single quotes:

onclick="removeElement('div8')" or 
onclick='removeElement("div8")'

Or you can escape the double quote:

echo '<div><img src="img.png" alt="image" onclick="removeElement(\"div'.$x.'\")" /></div>';

6 Comments

Quotes must be replaced with &quot;, using " in this context is incorrect.
I'm sure it works, but this is incorrect code. Don't blame me if it won't work in some browser, and don't blame IE ;)
@Dima Thanks for the tip, but at the moment I am using Chrome and it works fine, but have not tried it on other browsers :)
@Dima: You are right. It is not correct as in: it won't validate when you use a doctype other than HTML5. But I think that does not matter as browsers accept it anyway. Just use HTML5 doctypes and you'll be find. HTML5 doesn't care. :)
Well, @koenp, if nobody cares we will have same situation: everyone will blame IE (or some other browser), while they keep writing invalid code. Standards are created to be followed.
|
0

But a simpler solution would be to write in html directly:

?>
<div>
 <img src='img.png' alt='image' onclick='removeElement("div<?php echo $x; ?>")' />
</div>

Comments

0

when you using php echo try this code

<a href="javascript:add_cota(<?php echo $value->ID .','.$k.', \''.$st.'\'';?>)">

$st is the string param to avoid the ReferenceError: Active is not defined error

Comments

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.