2012-05-03 76 views
14

Tôi đang sử dụng PhoneGap và đang cố gắng để phát hiện các onClick, tuy nhiên Android dường như hoàn toàn bỏ qua nó, dưới đây là những gì tôi đang cố gắng:Android/PhoneGap - onClick() không làm việc

<select name="func" onclick="StartButtons();" data-native-menu="true"> 

Tôi đã thử nhiều các biến thể của onClick bao gồm javascript, jQuery, vv tuy nhiên không có thứ nào trong số này dường như hoạt động.

Tôi đã nhận thấy rằng onChange hoạt động, tuy nhiên điều này không được sử dụng nhiều đối với tôi vì tôi cần sử dụng lời nhắc yêu cầu người dùng xác nhận thay đổi, nếu không thì không làm gì cả. Tuy nhiên, sử dụng onchange vẫn thay đổi mục trong menu thả xuống.

Ai đó có thể giúp bạn với điều này không?

+0

Bạn đã thử gắn qua javascript để thay thế? Nó sạch hơn và có lẽ có sự hỗ trợ tốt hơn. Chỉ cần thêm một id để chọn và sau đó 'document.getElementById ('foo'). Onclick = StartButtons; ' – GillesC

Trả lời

0

Bạn đã thử đặt phương thức của mình thành "phương thức" thay vì "phương thức();"? Vì vậy, có thể bạn có thể thử dòng của mình là:

<select name="func" onclick="StartButtons" data-native-menu="true"> 

Sau đó, hy vọng phương thức của bạn sẽ được gọi.

+0

Tôi đã thử điều này trước đây, không may là nó không hoạt động, bất kỳ ý tưởng nào khác? Cảm ơn –

+3

'StartButtons' là một con trỏ trỏ đến một hàm. 'StartButtons()' sẽ thực hiện chức năng. – Omeriko

4

Thêm trình xử lý sự kiện nhấp chuột vào đối tượng của bạn bằng javascript. Đầu tiên thêm một id cho đối tượng:

<select id="obj_id" name="func" data-native-menu="true"> 

Và sau đó gọi addEventListener():

document.getElementById("obj_id").addEventListener("click", StartButtons, false); 

PhoneGap tài liệu recomends để chạy tất cả các mã javascript của bạn trong sự kiện "deviceready". Vì vậy, mã của bạn sẽ trông như thế này:

main.js:

function StartButtons() { ... } 

    function onDeviceReady() { 
     ... 
     document.getElementById("obj_id") 
      .addEventListener("click", StartButtons, false); 
     ... 
    } 

    function init() { 
     document.addEventListener("deviceready", onDeviceReady, false); 
    } 

index.html:

... 
     <script type="text/javascript" charset="utf-8" src="main.js"></script> 
    </head> 
    <body onload="init();"> 
     ... 
     <select id="obj_id" name="func" data-native-menu="true"> 
     ... 
    </body> 
+0

Đáng tiếc là điều này không hoạt động, Android dường như hoàn toàn bỏ qua các cuộc gọi. Bất kỳ ý tưởng nào khác? –

+0

Alternativly, tôi đã notcied rằng onChange hoạt động, tuy nhiên điều này là không sử dụng nhiều với tôi như tôi cần sử dụng một dấu nhắc yêu cầu người dùng là họ muốn thay đổi, nếu nó không có thì điều này được bỏ qua (tuy nhiên sử dụng onchange vẫn thay đổi mục trong dopbox). Cảm ơn –

11

tôi đã cùng một vấn đề với jQuery, Android dường như bỏ qua sự kiện click trong javascript. Ban đầu, mã của tôi với jQuery trông như thế này:

$("#element").click(function() { alert("message"); }); 

tôi đã phải thay đổi nó để:

$("#element").on("touchend", function() { alert("message"); }); 

Không chắc chắn nếu bạn đang sử dụng jQuery ở tất cả, nhưng hy vọng điều này sẽ giúp.

1

Xem ra, ràng buộc onclick trên đầu vào trong Cordova 3.4, không hoạt động. Nhưng nó hoạt động tốt với một phần tử div. Xem xét, các yếu tố đầu vào là một phần của phần tử biểu mẫu, như phần tử chọn, nó có thể là vấn đề của bạn.

0

https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'không an toàn-inline'; phương tiện truyền thông-src * ">

xóa mã này từ index.html

+0

'Chỉnh sửa phải có ít nhất 6 ký tự; Có cái gì khác để cải thiện trong bài này? '- Oho SO. – fWd82

1

user1183085's Câu trả lời là một trong những quyền. Android không nhận ra bấm các sự kiện như các ứng dụng web làm, điều này làm cho sence từ ứng dụng di động không phải là web khi có nguồn gốc, vì vậy đó là lý do tại sao phonegap được tạo ra nhưng vì nó hoạt động với jquery và không phải là thư viện android java trực tiếp Tôi đặt mã của tôi theo cách này:

Các nút hoặc phần tử trên web để xử lý tất cả giao diện web và các nút đặc biệt hoặc các phần tử ontouchend để xử lý các giao diện di động.Here's một phần của mã của tôi:

//this handles the login button events for the mobile touch of the user 
$("button.login-button").on("touchend", function() {alert('hello touch ! =o')}); 

//this handles the login button events for web clicks 
$("button.login-button").on("click", function() {alert('hello click ! =o')}); 

nhờ sử dụng user1183085, mà giải quyết cuộc sống của tôi mãi mãi =()

+0

Vui lòng đọc về cách sử dụng đánh dấu để định dạng câu trả lời của bạn. Vì nó là ngay bây giờ, nó là rất gần với chỉ xứng đáng downvotes vì ​​nó là rất khó đọc. Nói cách khác: bạn muốn câu trả lời của bạn trở nên hữu ích, không chỉ là một mớ hỗn độn của văn bản. – GhostCat

+0

xin lỗi tôi mới ... sai lầm của tôi, tôi đã đọc về nó. cảm ơn đề xuất của bạn – Prometeo