I'm newbie in programming. I would like to open a link by using onclick event but this doesn't work....Can you help me please?
Here the code:
$content .= '<a class="mike-link mike-pinterest"
href="'.$pinterestURL.'" data-pin-custom="true" target="_blank"
onclick="window.open("", "mikewindow","menubar=1,resizable=1,width=350,height=250");
return false;">Pin It</a>' ;
I think what you are trying to achieve is the following:
$content .= '<a class="mike-link mike-pinterest"
href="javascript:window.open("'.$pinterestURL.'", "mikewindow","menubar=1,resizable=1,width=350,height=250");
return false;" data-pin-custom="true" target="_blank"
>Pin It</a>' ;
onclick="window.open("", "mikewindow","menubar=1,resizable=1,width=350,height=250");
Your first " starts the attribute value.
Then you say window.open( which is the attribute value.
Then you say " which marks the end of the attribute value.
Then you say " again, which is invalid HTML.
If you want to include a " as data in an HTML attribute delimited with " characters then you need to encode it as "
Try this:
$content .= '<a class="mike-link mike-pinterest"
href="' . $pinterestURL . '" data-pin-custom="true" target="_blank"
onclick="window.open(\'\', \'mikewindow\',\'menubar=1,resizable=1,width=350,height=250\');
return false;">Pin It</a>';
Your problem was that you used double quotes to open the onclick, but then double quotes again inside the window.open function, which instead closed the onclick action quotes. The tricky thing is that using single quotes will close your php quotes. So what you do is use \', which lets php ignore the single quote, and write it as a single quote in your html.
Check this this codepen link:
<p>Click Me!</p>
$('p').click(function(){
window.open('https://google.com');
});
https://codepen.io/anon/pen/ZjRbEW
Related
I'm trying to get a link to open as a new window in PHP, I tried the following and a few variations, yet for some reason the links stops in javascript:void(window.open(
Any idea? Could it be something wrong with the '""'?
$html .= '<a class="ficha_partido_popup" href="javascript:void(window.open("/servicios/deporte/partidos/fichapartido_'.$filaPartido["partidocod"].'.html"))" rel="nofollow" title="Ver Ficha del partido"><img src="/imagenes/ficha.png" alt="Ver la ficha del partido" /></a>';
You need to escape the double quotes:
$html .= '<a class="ficha_partido_popup" href="javascript:void(window.open(\"/servicios/deporte/partidos/fichapartido_'.$filaPartido["partidocod"].'.html\"))" rel="nofollow" title="Ver Ficha del partido"><img src="/imagenes/ficha.png" alt="Ver la ficha del partido" /></a>';
You're using ' (single quote) to create the string in PHP.
You're using " (double quote) to create the string in Javascript.
Now, you're saying href="...window.open("...")". The issue is that you're trying to nest " within " and that just breaks it all. So the first double quote inside window.open ends up being the closing double quote for href and the rest of the string just becomes invalid in javascript.
To fix this, you can replace nested double quotes with single quotes and say href="...window.open('...')", except that you can't since if you use single quotes here, you'll end up breaking things in PHP since you're using single quotes to form the string in PHP.
So, use single nested quotes but escape them, like this -
href="...window.open(\'...\')"
So, your code will now become -
$html .= '<a class="ficha_partido_popup" href="javascript:void(window.open(\'/servicios/deporte/partidos/fichapartido_'.$filaPartido["partidocod"].'.html\'))" rel="nofollow" title="Ver Ficha del partido"><img src="/imagenes/ficha.png" alt="Ver la ficha del partido" /></a>';
To make it simple, divide it into 2 lines
$window_link = 'window.open("/file_path/filename_'.$filaPartido["partidocod"].'.html")';
$html .= '<a href="javascript:void( ' . $window_link . ' )" >Any link</a>';
OR
$link = $filaPartido["partidocod"];
$html .= <<<HTML
<a href="javascript:void( window.open('/file_path/filename_{$link}.html') )" >Any link</a>
HTML;
When I'm building HTML in JavaScript I'm constantly escaping double quotes. E.g.
$(wrapper).append("<input type=\"text\" name=\"thingummy[" + id + "]\" data-id=\"" + data_id + "\" id=\"" + id + "_" + data_id + "\" /> <br>");
and, when there are many quotation marks, I'm constantly making mistakes over which quotes I've escaped. And I end up spending more time than I'd like fixing them.
Is there a better (quicker / safer / more legible) way of building HTML than the approach I'm using?
UPDATE
One rather important point I forgot to mention! I'm outputting this JavaScript using PHP. So, I have code like this:
echo '$(wrapper).append("<input type=\"text\" name=\"thingummy[" + id + "]\" data-id=\"" + data_id + "\" id=\"" + id + "_" + data_id + "\" /> <br>");';
which makes using single quotation marks a problem ('cos they end up breaking the PHP! Which is another problem I keep experiencing when I forget I'm in the middle of some PHP and use a single quotation mark as mentioned in a comment below).
You could perhaps use templating strings in JavaScript. Makes it simple to insert variables into a string too with ${var} syntax.
echo '$(wrapper).append(`<input type="text" name="thingummy[${id}]" data-id="${data_id}" id="${id}_${data_id}" /> <br>`);';
You could use heredoc syntax like this:
<?php
echo <<<JAVASCRIPT
<script type="text/javascript">
alert("some javascript code where you don't have to escape double quotes");
</script>
JAVASCRIPT;
This would simplify you work.
Or you can close your php tag and open it again, like this:
<?php
$somePhpCode = 1;
?>
<script type="text/javascript">
alert("some javascript code where you don't have to escape double quotes");
</script>
<?php
$somePhpCode = 2;
?>
Through a $_POST request I query a database and return info in a string as follows:
$output .='<div class="searchdiv"> <b>'.$tit.' </b>- '.$art.' <br> watch full tutorial</div>';
My problem is the "window.open" statement. It works as follows in a plain html doc as inline JS:
$output .='<div class="searchdiv"> <b>'.$tit.' </b>- '.$art.' <br> watch full tutorial</div>';
But I think my problem in the PHP string is the single and double quotation marks.What am I doing wrong?
You need quotes around the URL.
$output .= '... <a href="#" onclick="window.open("' . $prev . '", "_blank", ...
// ---------------------------------------- here ^ -- and here ^
You would be able to notice this pretty quick if you looked at your HTML source, to see what was generated.
It seems that you've messed up the quotes in there slightly...
$output .='<div class="searchdiv"> <b>'.$tit.' </b>- '.$art.' <br> watch full tutorial</div>';
You used " to define the onclick event, however you've used " inside of that event, which made it invalid. Replace the " inside of the event with \', which will escape the quote and not mess up your PHP.
$output .='<div class="searchdiv"> <b>'.$tit.' </b>- '.$art.' <br> watch full tutorial</div>';
And, if $prev is not referring to a variable in JS (if it will end up as a string), you need those quotes around that as well.
\''.$prev.'\'
Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 8 years ago.
Improve this question
I'm working with Magento trying to style error messages as pop-ups, instead of displaying inline.
I found an article explaining how to do this, but the code displays an error when I try to use it. (http://azharkamar.com/5378/magento-modifying-default-message-alert-box-popup-dialog/)
This is the code I am using:
$html .= '<a class="msgclose" href="#" onclick="document.getElementById("messages").style.visibility="hidden"">x</a>';
A comment mentioned after the article said that they "had to escape the single quotes to make it work."
I tried editing the code, and used the code shown below. The close button appears but it won't close the box.
$html .= '<a class="msgclose" href="#" onclick="document.getElementById("messages").style.visibility="hidden"">x</a>';
Any help would be much appreciated, thank you!
You can escape a single quote by preceeding it with a backslash, or by using double quotes for the string:
$var = 'Escape \' like this';
$var = "Or embed ' like this";
If you need to embed javascript, it might be a bit harder, because the quote in the Javascript string needs also to be escaped. Usually you can get arround by cleverly combining single and double quotes:
$html .= '<a class="msgclose" href="#" onclick="document.getElementById(\'messages\').style.visibility=\'hidden\'">x</a>';
Or you can use heredoc:
$html = <<<html
<a class="msgclose" href="#" onclick="document.getElementById('messages').style.visibility='hidden'">x</a>'
html;
By the way, escaping quotes in HTML is a different story. You use the " entity for that, so if you want to have double quotes in Javascript, the result would be:
$html .= '<a class="msgclose" href="#" onclick="document.getElementById("messages").style.visibility="hidden"">x</a>';
You can escape the single quotes in your code, with backslashes, like this:
$html .= '<a class="msgclose" href="#" onclick="document.getElementById(\'messages\').style.visibility=\'hidden\'">x</a>';
Or you can move the javascript out of your html:
$html .= '<a class="msgclose" href="#" onclick="hideMessage()">x</a>';
<script type="text/javascript">
function hideMessage() {
document.getElementById("messages").style.visibility = "hidden";
}
</script>
You can both escape ' putting backslashes before them (' -> \')
$html .= '<a class="msgclose" href="#" onclick="document.getElementById(\'messages\').style.visibility="hidden">x</a>';
Or use the EOF function to eliminate the need for escaping.
$html .= <<<EOF
<a class="msgclose" href="#" onclick="document.getElementById('messages').style.visibility="hidden">x</a>
EOF;
To Escape a character in php use \ backslash . But the value that $html will have after escaping it will be untidy
Here is how i would do it..
$html .= "<a class='msgclose' href='#' onclick='document.getElementById('messages').style.visibility='hidden''>x</a>";
I used double quotes and within them i used single quotes
How can I add a param to the removeSound function in this JavaScript code?
I cannot get it to work.
var param = "111";
coder = '<a href="javascript:;" onClick="javascript: removeSound(' + param + ');" >Delete</a>'
Update
I do not know why code = was removed! This is needed to explain the problem context.
I just want to add a proper double quoting escape method to the answers as none showed a correct way to escape double quotes inside of an onClick attribute.
In HTML it is not sufficient to use only a backslash when escaping a JavaScript double quote. You need the proper HTML entity which is "
This is a live example:
Delete
However for readability I would recommend using Antony Scott's way by using single quotes.
Delete
To add the param as a variable from whatever script your HTML is generated in you should do this:
code = '<a href="javascript:;" onClick="javascript: removeSound("' + the_param + '");" >Delete</a>';
The other possible way should be:
code = '<a href="javascript:;" onClick="javascript: removeSound(\'' + the_param + '\');" >Delete</a>';
You need to use different quotes. Try something like this ...
<a href="javascript:;" onClick="javascript: removeSound('PARAM HERE');" >Delete</a>
try this
code = 'Delete';
try this
<a href="#" onClick="removeSound('121212')" >Delete</a>