1

我需要将这些值传递给头部的 javascript 函数。问题是,当从数据库中提取时,一些单词不止一个,使用 javascript:function(vars) 传递时,使用 href 它会在一个空格处将其截断,我根本无法让 onclick 工作。我在变量(“”、“”、/”和{)周围尝试了各种引号和括号组合,以及在我知道在传递前会有多个单词的变量周围加上引号(见下文) .这里是PHP:

<?php
    require('config/dbconfig.php');
    $query = "SELECT * FROM news ORDER BY id DESC LIMIT 4";
    if ($stmt = $mysqli->prepare($query)) {
        /* execute statement */
        $stmt->execute();

        /* bind result variables */
        $stmt->bind_result($idn, $titlen, $categoryn, $descn, $postdaten, $authorn);

        /* fetch values */
        while ($stmt->fetch()) {
            //echo 'id: '. $id .' title: '. $title;
            echo "<table border='0'>";
            $shortDescLengthn = strlen($descn);
            if ($shortDescLengthn > 106) {
                $sDCutn = 106 - $shortDescLengthn;
                $shortDescn = substr($descn, 0, $sDCutn);
            } else {
                $shortDescn = $descn;
            }
                        $titlenQuote = "'". $titlen ."'";
                        $descnQuote = "'". $descn ."'";
                        $authornQuote = "'". $authorn ."'";
            echo "
                <h1>". $titlen ."</h1>
                <tr><td>". $shortDescn ."...</td></tr>
                <tr><td><a href='javascript:return false;' onclick='readMore(". $idn .",". $titlenQuote .",". $categoryn .",
                            ". $descnQuote .",". $postdaten .",". $authornQuote .")'>Read More</a></td></tr>
                <tr><td>Written by: " . $authorn . "</td></tr>
                <tr><td><img src='images/hardcore-games-newsbar-border.png' width='470px' /></td></tr>
            ";
        }
        echo "</table><br />";

        /* close statement */
        $stmt->close();
    }

    /* close connection */
    $mysqli->close();
?>

它的功能是:

<script type="text/javascript">
    function readMore(id,title,cat,desc,post,auth) {
        alert(id +","+ title +","+ cat +","+ desc +","+ post +","+ auth);
        var $dialog = $('<div></div>').html('This dialog will show every time!').dialog({autoOpen: false,title: 'Basic Dialog'});
        $dialog.dialog('open');
        $dialog.title = title;
        $dialog.html(desc);
    }
</script>

这是在主索引页面中使用 load() 的页面。我也遇到了对话问题,但它甚至还没有达到这一点,所以这是下一步。如果需要知道,所有 jquery 包含都在主索引页面上。load() 将进入索引页面上的一个 div,到目前为止效果很好。

4

3 回答 3

3

你目前正在做这样的事情:

echo "<a href='#' onclick='doSomething('" . $someData . "');'>...";

正如您所指出的,这将不起作用,因为引号冲突。有一个快速的方法来解决这个问题,但我认为如果你再改变一点会更好。

首先,首先将数据放入属性中:

echo "<a ... data-title=\"" . htmlspecialchars($title) . "\" ...>...";

请注意title在我把它放在那里之前我是如何逃避它的。您可以添加更多类似的属性,但您应该让它们都以data-.

接下来,class对其应用 a 。例如,read-more

echo "<a ... class=\"read-more\" data-title=\"" . htmlspecialchars($title) . "\" ...>...";

现在您可以将事件侦听器绑定到它。假设所有项目都包含在 a divwith an idof 中items。然后您可以在 JavaScript 中执行此操作:

$("#items").on("click", ".read-more", function(e) {
    var me = $(this);
    var title = me.attr('data-title');
    alert("The title is:\n" + title);
    e.preventDefault();
});

然后你可以扩展它以弹出一个对话框或任何你想要它做的事情。


为什么是这种方式而不是“简单”的方式?

这种方式是分离内容、表示和行为的开始,这通常被认为是一件好事。以前,您将tables 用于布局和表示,将内容与内联 JavaScript 用于行为;一大堆东西。

将这一切分开有助于可维护性,并且如果将常见的东西放入单独的文件并由浏览器缓存,通常可以带来更好的加载时间。如果这一切都是大汤,浏览器无法单独缓存这些片段。

于 2012-07-29T23:24:45.107 回答
2

您对属性值分隔符和 JavaScript 字符串分隔符使用相同类型的引号;不要那样做。此外,json_encode值而不是仅仅将它们用引号括起来,如下所示:

echo "
    <h1>". $titlen ."</h1>
    <tr><td>". $shortDescn ."...</td></tr>
    <tr><td><a href='javascript:return false;' onclick='readMore(". $idn .",". json_encode($titlen) .",". json_encode($categoryn) .",
    ". json_encode($descn) .",". json_encode($postdaten) .",". json_encode($authorn) .")'>Read More</a></td></tr>
    <tr><td>Written by: " . $authorn . "</td></tr>
    <tr><td><img src='images/hardcore-games-newsbar-border.png' width='470px' /></td></tr>
";

…而且您还需要对它们进行 HTML 编码。

echo "<h1>$titlen</h1>";
echo "<tr><td>$shortDescn...</td></tr>";
echo '<tr><td><a href="javascript:return false;" onclick="'
    . 'readMore(' . $idn . ',' . htmlspecialchars(json_encode($titlen)) . ','
    . htmlspecialchars(json_encode($categoryn)) . ','
    . htmlspecialchars(json_encode($descn)) . ',' . htmlspecialchars(json_encode($postdaten)) . ','
    . htmlspecialchars(json_encode($authorn)) . ')">Read More</a></td></tr>';
echo "<tr><td>Written by: $authorn</td></tr>";
echo '<tr><td><img src="images/hardcore-games-newsbar-border.png" width="470px" /></td></tr>';

ProTip™:<tr>不能直接在<h1>.

于 2012-07-29T23:17:58.530 回答
1
<html>
<head>
<SCRIPT LANGUAGE="JAVASCRIPT" TYPE="TEXT/JAVASCRIPT">
function login(t) {
alert(t);
}
</SCRIPT>
</head>
<body>
<?php
$id=$_GET['id'];
print "<input type='button' name='button' value='button' onClick=login('$id')>";
?>
</body>
</html>
于 2015-01-27T06:26:19.473 回答