2011-05-30 64 views
0

这是jquerymobile应用程序的一个片段。这是一个简单的文件管理器,允许删除文件,并且我想确认删除。我正在尝试使用javascript 确认来仔细检查一个操作是否应该继续;但似乎无论我做什么,我都不能停止它发生。jquerymobile确认似乎没有影响结果?

<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种不同的方法来防止重定向页面的链接,但没有人似乎在做什么,我所希望的。我究竟做错了什么?

回答

2

你正在使用.live而不理解它是如何做到这一点。

更改.live.bind它会工作。

另外 - 阅读大约.live以了解.live绑定到文档并在事件冒泡时捕获事件,因此防止默认操作或任何事情已为时过晚。

而且顺便说一句 - 如果你在返回语句之后放置代码,有人可能会因为某种奇怪的原因而觉得它实际上运行时感到困惑。

[编辑]

如果你想让它不使用Javascript(渐进增强和东西)工作,那么你应该去对话服务器端生成的问这个问题,即使没有任何的JavaScript的目的。

如果你不关心渐进式增强功能,并希望它只能在高端浏览器中工作,那么你为什么要打扰href? 将href重命名为data-href,并在用户确认后加载它。你不必防止任何事情。

+0

你说得对,我误解'.live',但'.bind'也不适用于我,因为列表项是通过ajax加载的。正在浏览的文件系统要预先加载整个文件,所以它一次只加载一个目录。我尝试使用'.bind'(我实际上曾尝试'.click'),但它仍然没有做到我想要的。我可能只是尝试切换到jquerymobile对话框,看看我能否得到这个工作。 – 2011-05-30 20:03:01

+0

是的。 'bind'与'live'不同。在使用“live”方法之前,我使用jquery完成了一个重要的项目,而且我必须全力以赴。你自己处理ajax调用,为什么不把新的点击绑定到你加载的任何东西?这就是它在旧时代的做法;)另外 - 请参阅我的编辑 – naugtur 2011-05-31 07:00:53

+1

我使用了jqmobile对话框功能。我并不担心渐进增强功能,因为它是一个应用程序,用于我的家中,由我,在我的设备上使用,而且我无意将JS关闭。 – 2011-06-01 12:13:31

相关问题