【问题标题】:using a href (html)tag along with PHP与 PHP 一起使用 href (html) 标签
【发布时间】:2011-01-27 15:26:21
【问题描述】:

我试过了:

<?php include("delete.php") ?>
<?php 

   ....
   ....
   ....

if($result=mysql_query($sql))
                {

                    echo "<table><th>Id</th><th>Name</th><th>Description</th><th>Unit Price</th>";
                    while($row = mysql_fetch_array($result))
                    {
                        echo "<tr><td>".$row['Id']."</td><td>".$row['Name']."</td><td>".$row['Description']."</td><td>".$row['UnitPrice']."</td> 
                        <td><a href='delproduct($row[Id])' onclick = 'return MsgOkCancel()'>Delete</a></td></tr>";
                        echo "<br/>";
                    }
                }
?>

以下javascript在同一页面中:

<script type="text/javascript" language="javascript">
            function MsgOkCancel() {
                                    if (confirm("Are You Sure You Want to Delete?"))
                                     { return true }
                                    else
                                    {return false}
                                   }
        </script> 

delproduct 是 delete.php 中的一个 javascript 函数 写成这样:

<script type="javascript">
function delproduct(Id)
{
    alert('Id '+ Id);
}
<script>

** 之后 **点击删除一个okcancel消息框出现询问确认

** 但是 **点击“确定”后它应该在 delproduct 函数中执行语句,但它没有

它给出的错误如下:

找不到对象:在此服务器上找不到请求的 URL。

会有什么问题?

请帮忙,

谢谢

【问题讨论】:

  • 这更像是一个 javascript 问题而不是 php 问题。 MsgOkCancel() 长什么样子?

标签: php javascript html href


【解决方案1】:

没有方案的 URI(例如 http:)被视为相对 URI。

您似乎正在寻找 javascript:(除了创建书签之外,它永远不应用于其他任何事情)。

你应该做的是:

onclick="if (MsgOkCancel()) { delproduct($row[Id]); return false; } else {  return false; }"

但是,您应该在 href 中包含 something that works,但由于这似乎对服务器进行了重大更改,您应该使用 POST 而不是 GET,因此链接是错误的工具。

你可能应该拥有的是:

<form action="/delete" method="post" onsubmit="return delete(this);">
    <input type="hidden" name="id" value="<?php echo htmlspecialchars($row[Id]); ?>">
    <input type="submit" value="Delete">
</form>

结合:

function delete(form) {
    if (confirm("Are You Sure You Want to Delete?")) {
        delproduct(form.elements.id.value);
    }
    return false;
}

更好的是,去掉 onsubmit 属性并使用 JavaScript 分配事件。

【讨论】:

  • +1 特别是对于渐进增强提示和 POST 建议。
【解决方案2】:

我认为您需要不同的设置。

首先,如果您要在 href 属性中调用 javascript 函数,则需要在其前面加上 javascript:,例如 href="javascript:delproduct(...)"。但不建议从 href 属性调用 javascript。该属性适用于 url。

我建议您创建一个显示消息框的函数,并根据用户的操作调用 delproduct 函数。比如:

function confirmDelProduct( id )
{
    if( msgOkCancel() )
    {
        delproduct( id );
    }
    // return false is meant to stop the href url from being called
    return false;
}

在你的 html 中:

<a href="#" onclick="return confirmDelProduct(' . $row[ 'id' ] . ')"> ... etc

【讨论】:

    【解决方案3】:

    这个呢: PHP:

    <a href="javascript:void(0);" onclick=\"delproduct({$row[Id]})\">
    

    JS:

    function delproduct(Id){
        if(MsgOkCancel()) alert('Id '+ Id);
    }
    

    【讨论】:

    • javascript:void(0) 是邪恶的,你的 PHP 有语法错误。
    • @David:我知道这被认为是“邪恶的”,但你知道为什么吗?我从来没有真正理解为什么(或者我忘记了)。
    • 它不是渐进式的。它并不引人注目。它没有提供关于链接在状态栏中的作用的线索。
    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    相关资源
    最近更新 更多