0

这是来自 jquerymobile 应用程序的片段。这是一个简单的文件管理器,允许删除文件,我想确认删除。我正在尝试使用 javascript确认来仔细检查一个动作是否应该继续;但似乎无论我做什么,我都无法阻止它的发生。

<script type="text/javascript">
    $(document).ready(function(){
        $(".confirm").live("click",function(ev){
            var nam = $(this).html(),
                loc = $(this).attr('href'),
                answer = confirm("Are you sure you want to delete:\n\n" + nam);
            if (answer){
                return true;
                //window.location.href = loc;
            }else{
                ev.preventDefault();
                return false;
                window.location.href = window.location.href;
            }
        });
    });
</script>

...

<div data-role="page" data-theme="a">
    <div data-role="content">
        <ul data-role="listview" data-inset="true">
            ...
            <li><a class="confirm" href="?delete=#urlEncodedFormat(f.name)#">#f.name#</a></li>
        </ul>
    </div>
</div>

您可以看到我尝试了 3 种不同的方法来阻止链接重定向页面,但它们似乎都没有达到我的预期。我究竟做错了什么?

4

1 回答 1

2

您在使用.live时并不了解它是如何发挥作用的。

更改.live.bind,它将起作用。

另外-阅读.live以获取.live绑定到文档并在事件冒泡时捕获事件的知识,因此阻止默认操作或任何事情为时已晚。

顺便说一句——如果你把代码放在 return 语句之后,那么有人可能会误以为它实际上是出于某种奇怪的原因运行的。

[编辑]

如果您希望它在没有 javascript(渐进增强和其他东西)的情况下工作,那么即使没有 javascript,您也应该使用在服务器端生成的对话框来询问问题。

如果你不关心渐进增强并且希望它只在高端浏览器中工作,那么你为什么要使用 href 呢?如果用户确认,重命名hrefdata-href加载它。你不必阻止任何事情。

于 2011-05-30T08:22:11.227 回答