我使用PHP将变量传递到元素的onclick
,但是当我这样做时,我得到一个"未终止的字符串文字"字符串的错误太长。我的PHP如下:
$query = $conn->prepare("SELECT Name, Image, Description, Link, Price, ID FROM gallery ORDER BY ID desc");
$query->execute();
$query->bind_result($name, $img, $desc, $link, $price, $id);
while($query->fetch())
{
if(strlen($desc) > 100)
{
$sdesc = substr($desc, 0, 100) . '...';
}
$onclick = 'popup(\'' . $name . '\', \'' . $desc . '\', \'' . $price . '\', \'' . $img . '\', \'' . $link . '\', ' . $id . ')';
echo '<div class="gallery" onclick="' . $onclick . '">
<img src="' . $img . '" alt="' . $name . '" />
<div><p>' . $sdesc . '</p>
<a href="' . $link . '" target="_blank">' . $price . '</a>
</div></div>';
}
我的jQuery如下
function popup(title, desc, price, img, link, id)
{
$(".popupbodyg").children().remove();
var HTML = '<input type="image" src="close.gif" id="close" /><div><div id="comments">' +
'<iframe src="comments.php?id=' + id + '"></iframe><br /><input type="image" id="share" src="Very-Basic-share-icon.png" /></div>' +
'<div id="desc"><p>' + desc + '</p><br />' +
'<a class="gallery" href="' + link + '" target="_blank">' + price + '</a></div>' +
'<div id="img"><img src="' + img + '" alt="' + title + '"/></div></div>';
$(".popupbodyg").append(HTML);
$("#popup").toggle();
$(".popupbodyg #img").css("width", $(".popupbodyg").width() - 230 + "px");
$(".popupbodyg #img").css("height", $(".popupbodyg").height() - ($("#desc").height - 5) + "px");
$("#close").click(function(){
$("#popup").hide();
});
$("#share").click(function(){
$("#sharepopup").show();
$("#sharepopup").find("#link").attr("value", "http://www.encantojewellerydesign.com/gallery/?g=" + id);
$("#sharepopup").find(".fb-share-button").attr("data-href", "http://www.encantojewellerydesign.com/gallery/?g=" + id);
$("#sclose").click(function(){
$("#sharepopup").hide();
});
});
}
我现在能想到的唯一方法是限制说明中的字符数量,我想避免这样做。
答案 0 :(得分:-1)
您是否尝试过在SO上其他地方找到的任何字符串替换方法?
$desc=str_replace("\n","\\n",$desc); //I'm guessing that the newline would probably be in the description if anywhere in the data you're passing.
ALSO: 另一种稍微不同的方法是将数据嵌入到元素中,并使用单击处理程序检索数据,然后将其传递给弹出函数。
换句话说,你可以改变div.gallery看起来像这样:
<div class="gallery" data-name=".$name." data-img=".$img." data-desc=".$desc." data-link=".$link." data-price=".$price." data-id=".$id.">
然后添加一个这样的点击处理程序:
$('gallery').on('click', function() {
var name = $(this).data('name');
var img = $(this).data('img');
var desc = $(this).data('desc');
var link = $(this).data('link');
var price = $(this).data('price');
var id = $(this).data('id');
popup(title, desc, price, img, link, id);
});
答案 1 :(得分:-2)
我假设它与$ description和其他变量传递给yout js的额外html字符有关。尝试可能是这样的(为了更好的答案,发布你传递的变量的转储):
<?php
$query = $conn->prepare("SELECT Name, Image, Description, Link, Price, ID FROM gallery ORDER BY ID desc");
$query->execute();
$query->bind_result($name, $img, $desc, $link, $price, $id);
while($query->fetch())
{
if(strlen($desc) > 100)
{
$sdesc = substr($desc, 0, 100) . '...';
}
$onclick = 'popup(\'' .strip_everything( $name ). '\', \'' . strip_everything($desc ). '\', \'' .strip_everything $price) . '\', \'' . $img . '\', \'' . $link . '\', ' . $id . ')';
echo '<div class="gallery" onclick="' . $onclick . '">
<img src="' . $img . '" alt="' . $name . '" />
<div><p>' . $sdesc . '</p>
<a href="' . $link . '" target="_blank">' . $price . '</a>
</div></div>';
}
function strip_everything($str){
$str = strip_tags($str);
return str_replace("\n" , ' ' , $str);
}