2012-05-08 65 views
2

是否有一個簡單的方法來重新編寫onclick移動web應用程序中的鏈接以便使用Zepto進行點擊?目前我想爲每個onclick實例觸發$ .tap命令。將onClick方法轉換爲Zepto中的點擊方法

例如

<a href="#" tap="doSomething(); return false;">Link</a> 

這是可能的,或者是有沒有辦法阻止的onclick燒製而成,但採取的onclick方法,並把它叫做$ .tap方法裏面?

使用Zepto製作快速按鈕的任何建議?

+0

類似當你點擊.trigger('onclick') – Huangism

+0

是的 - 但你怎麼能防止onclick點擊時發射? – gregavola

+0

你的意思是有沒有辦法阻止它進入鏈接?或者是否有某個你不想觸發的onclick函數? – Huangism

回答

0

好吧,所以我理解你的方式是你想在移動和桌面上的不同行爲,但使用相同的代碼。如果是這樣,那麼你需要確定你是在哪個平臺,然後確定你的代碼

if(MOBILE) { 
    $('element').click(function(){ 
     return false; 
    }); 

    $('element').on('touchstart', function(){ 
     // functionality of the onclick written here 
    }); 
} 
else { 
// desktop event listeners 
} 
+0

沒錯 - 但是我有散列碎片,需要被解僱,比如Page One - 我仍然想要改變這個URL。返回錯誤會導致網址更改無效嗎? – gregavola

+0

請避免使用''live''來代替'on'。 – chowey

2

更優雅的方式將您的點擊觸發存儲在一個變量,然後從重新映射變量「點擊」到「touchstart」當你在處理觸摸屏設備時。

在這裏,我用一個全局對象變量,myUtils,存儲我的點擊事件,默認爲「點擊」作爲它的值:

var myUtils = myUtils || {}; 
myUtils.events = myUtils.events || { 
    click : "click" 
}; 

如果有檢測,然後我改變我的myUtils的觸摸屏。 events.click財產擁有的「touchstart」的值:

if (typeof document.body.ontouchstart !== "undefined") { 
    myUtils.events.click = "touchstart"; 
} 

現在,當我結合我的點擊事件,以我的元素,我用我的myUtils.events.click屬性爲事件的名稱:

$(function() { 
    $("#link").bind(myUtils.events.click, function(e) { 
    alert("I'm a " + e.type); 
    e.preventDefault(); 
    }); 
});​ 

這樣我只需要做「這是一個觸摸屏?」在我的應用程序中測試一次,然後根據需要綁定到「touchstart」或「click」。我不必擔心在移動設備上取消不需要的點擊事件,因爲該事件從不受限制。

e.preventDefault()調用將阻止鏈接被遵循(假設#link是一個href鏈接)。

的jsfiddle版本:http://jsfiddle.net/BrownieBoy/Vsakw/

但是要注意,這個代碼假定一個觸摸屏設備處於只有觸摸屏設備;即電話或平板電腦。如果你在觸摸屏PC上,那麼你將無法使用鼠標!

+0

JSFiddle Spike +1。 – Shahul3D