2011-10-19 26 views
9
events: 
    'click' : 'select' 

Khi sử dụng sự kiện này trên Mobile Safari, sự kiện sẽ được kích hoạt hai lần khi chạm vào. Đây có phải là lỗi đã biết hay thứ gì đó mà tôi đang gây ra không?Sự kiện nhấp chuột Backbone.js không hoạt động với liên lạc

Tôi đã kể từ khi thay đổi nó để

events: 
    'touchstart' : 'select' 

và nó hoạt động tuyệt vời nhưng có nghĩa là nó sẽ không làm việc trong các trình duyệt bình thường nữa.

Cảm ơn mọi thông tin.

Trả lời

1

Tôi không quen thuộc với Backbone, nhưng có thể thử đặt nó theo điều kiện?

if ('ontouchstart' in document.documentElement) { 
    // 'touchstart': 'select' 
} else { 
    // 'click': 'select' 
} 
16

Hãy thử mã này:

TouchView = Backbone.View.extend({ 
    events: function() { 
    return MOBILE ? 
     { 
     "touchstart": 'select' 
     } : 
     { 
     "mousedown": 'select' 
     } 
    } 
} 

Nhìn thấy nó trong hành động: http://jsfiddle.net/dira/Ke2px/2/

+0

Không hoạt động đối với tôi (không thấy bất kỳ kết quả đầu ra nào trong bảng điều khiển). Hệ thống sự kiện xương sống đã hoạt động mặc dù vì sự kiện được kích hoạt khi tôi thay đổi nó thành "click #main". – Nippysaurus

+0

@Nippysaurus, bạn sẽ cần có mã riêng để phát hiện 'MOBILE'. –

3

Tôi đã sử dụng Modernizr để phát hiện các thiết bị cảm ứng và sử dụng đoạn mã sau và điều này đã làm việc cho tôi.

events :function(){ 
    return Modernizr.touch ? 
    { 
     "touchstart #edit" : "openEdit", 
    }: 
    { 
     "click #edit" : "openEdit", 
    } 
} 
+0

Đã hoạt động hoàn hảo! –

3

Tôi đã giải quyết cùng một vấn đề tổng quát bằng cách tạo backbone.touch for Backbone rằng sẽ khỉ vá Backbone.View để đáp ứng với sự kiện chạm khi một thiết bị cảm ứng được sử dụng, hoặc các sự kiện nhấp chuột thường xuyên khi không.

Bạn chỉ có thể bao gồm tệp nguồn để nó biến đổi tất cả các sự kiện click của bạn trong Backbone.Views hoặc bạn có thể xem mã và tự mình triển khai.

2

tôi xác định cả hai loại sự kiện và nó làm việc cho tôi trên một máy tính để bàn và điện thoại di động:

events: { 
'click' : 'select', 
'touchstart' : 'select' 
} 
+3

Đó sẽ cháy các 'chọn' phương pháp hai lần, kể từ khi bạn gõ vào một thiết bị cảm ứng nó cháy tất cả các sự kiện: touchstart touchmove touchend mouseover MouseMove mousedown mouseup nhấp chuột – SimplGy

0

Sử dụng coffeescript, tôi muốn làm những điều sau đây, tôi không bao giờ tìm thấy một lý do để mang đến sự hiện đại hóa khi mọi thiết bị di động ngày nay thực sự là thiết bị cảm ứng, ý tôi là khi nào là lần cuối cùng bạn phải thực sự hỗ trợ thứ gì đó không có?

window.isTouchDevice = (/android|webos|iphone|ipod|ipad|blackberry|iemobile/i.test(navigator.userAgent.toLowerCase())) 

    events: -> 
    for k, v of this when /click/.test(k) and isTouchDevice 
     mobileKey = k.replace('click','touchstart') 
     events[ mobileKey ] = v 
     delete events[ k ] 
    return events 

Coffeescript đọc tốt hơn cho các loại hiểu danh sách này.

0

tính năng này phù hợp với tôi.

events:{ 
    'click #edit':'select', 
    'touchstart #edit':'select' 
}, 
select: function(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    console.log('open upload dialog ', e.type); 
} 

bây giờ khi bạn kiểm tra điều này nếu thiết bị chạm vào e.type phải chạm và chỉ kích hoạt một lần. Tương tự cho nhấp chuột trên thiết bị không chạm. Trong trường hợp ai đó vẫn đang tìm kiếm một giải pháp đơn giản cho việc này.

Các vấn đề liên quan