2012-02-08 61 views
0

這適用於桌面Safari,但在iOS版本中不會彈出警報。是否可以綁定到iOS中的'html'元素?我想在用戶點擊頁面上的其他位置時關閉下拉菜單。iOS綁定javascript功能點擊<html>

$('html').bind("click", function(){alert("clicked!")}) 

編輯

發佈此爲HTML,因爲的jsfiddle在iframe中,這顯然擺脫了我的問題的嵌入。在桌面上打開此頁面safari可以正常工作,但在iOS模擬器中,它不會在單擊時顯示任何內容。

<html> 
    <head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
     $('html, body').bind("click", function(){alert("html or body")}) 
     $(document).bind("click", function(){alert("document")}) 
     }); 
    </script> 
    <body> 
    </body> 
</html> 

EDIT 2

這也不會在iPhone模擬器或在我的iPhone爲我工作。如果我將委託()放入我的應用程序並單擊鏈接,我確實會收到警報。

<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> 
<body> 
</body> 
<script type="text/javascript"> 
    $(document).delegate('html, body', "click", function(){alert("html or body")}); 
</script> 
</html> 

編輯3

這工作!

<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> 
<body> 
    <div id="stuff">applesauce</div> 
    <div>other stuff</div> 
</body> 
<script type="text/javascript"> 
    $(':not[#stuff]').on("click", function(){alert("not stuff")}); 
</script> 
</html> 
+1

您是否嘗試過使用$('body')來代替? – 2012-02-08 19:42:05

+0

爲什麼$('body')會改爲工作?有沒有一個參考文獻說要聽身體? – spike 2012-02-08 20:26:28

+0

我沒有任何引用,但每個設備處理JavaScript有點不同,所以iOS可能會使用$('html')稍有不同。 – 2012-02-08 20:30:43

回答

0

jQuery.click()在iOS上無法正常工作。我懷疑你和bind()有同樣的問題。但jQuery.delegate()確實有效。

$('html').delegate('body', 'click', function(){ alert("body"); }); 

應該爲你工作。推測()上也會起作用,但我還沒有機會嘗試它。另外,您應該將該腳本塊移動到body標籤下並丟失$(document).ready()。

更新:在任何最近的jQuery年份中,on(event,selector,function)都是最好的選擇。它適用於IOS並抵禦泄漏事件處理程序。

$('body').on('click', ':not[#stuff]', function(){ alert("not stuff"); }); 
+0

你可以看看我的第二次編輯?我沒有運氣就試過這個。 – spike 2012-02-08 22:56:57

+0

我沒有我的iPad在我面前,所以我無法檢查。但我認爲目標也很重要。試試我上面的編輯。 – Jason 2012-02-09 00:23:03

+0

如果您試圖捕捉頁面上的任何點擊,則可能無法使用。由於觸摸界面,Safari會做一些奇怪的事情來解釋你的手指實際在做什麼。當我點擊離開時需要關閉某個元素時,我使用了一個選擇器來「不顯示元素」而不是body,而且工作正常。 – Jason 2012-02-09 00:26:46

0

使用documentbody元素而不是html

$(document).bind("click", function(){ 
      alert("clicked!") 
    }); 

你也可以試試這個。

$('html, body').bind("click", function(){ 
      alert("clicked!") 
    }); 
+0

看到我的編輯,只是嘗試這兩個建議。 – spike 2012-02-08 20:24:39