2012-06-07 27 views
7

câu hỏi này trông giống như In Jquery, how can I tell between a programatic and user click?Javascript/jquery làm thế nào để phân biệt giữa kích hoạt và nhấp chuột của người dùng?

Nhưng tôi không thể làm cho nó, mã của tôi

<div class="sample_class" onclick="sample_fn(arg1,arg2,arg3,arg4, e);" ></div> 
<div class="trigger_class" onclick="trigger_fn()></div> 


function sample_fn(arg1,arg2,arg3,arg4, e){ 
    console.log(e) ; 
    console.log(e.isTrigger); 
    console.log(e.hasOwnProperty('originalEvent')); 
} 


function trigger_fn(){ 
    $(".sample_class").trigger("click") 
} 

trên nhấp chuột vào div.sample_class tôi đang nhận được trong giao diện điều khiển Object không xác định sai

khi nhấp vào div.tigger_class tôi đang ở trong bảng điều khiển tương tự Đối tượng không xác định false

Tôi không thể phân biệt giữa hai lần nhấp này. Cảm ơn trước

+1

Sau đó, tại sao bạn mô phỏng nhấp chuột? Viết một hàm mới không chia sẻ cùng một mã. Bạn cũng có thể đọc về [đặt tên sự kiện] (http://docs.jquery.com/Namespaced_Events) hoặc [sự kiện tùy chỉnh] (http://corymathews.com/jquery-custom-events/) để xem họ có muốn giúp tình hình của bạn. – Blazemonger

+1

Trong HTML của bạn, bạn có 'onclick =" tigger_fn() "' và trong Javascript bạn có 'chức năng trigget_fn()' - lỗi chính tả sẽ không giúp làm bất cứ điều gì làm việc. Nếu chúng không có trong mã thực tế của bạn, chúng cũng không nên có trong câu hỏi của bạn. –

+0

Lỗi Typo được sửa chữa ở đây .....Trên thực tế nó không có trong mã – druveen

Trả lời

6

CẬP NHẬT: Tính đến jQuery 1.7+, các đối tượng sự kiện (e trong các mã dưới đây) đối tượng sẽ chứa một tài sản mang tên e.isTrigger đó là true nếu sự kiện này được kích hoạt và xác định nếu không được kích hoạt; điều này là không có giấy tờ để kiểm tra điều này (demo) trước khi sử dụng nó. Nếu sử dụng phiên bản cũ hơn của jQuery, hãy sử dụng mã bên dưới.


Có thể dễ dàng truyền cờ cho chức năng của bạn hơn. Đây là một demo:

HTML

<button>Trigger a click below</button> 

<div id="test">Click Me</div>​ 

Script

​$('#test').click(function(e, triggered){ 
    var msg = (triggered) ? ', triggered' : ''; 
    console.log('clicked' + msg); 
});​​ 

$('button').click(function(){ 
    // pass a true flag to the click function to indicate 
    // it's been triggered 
    $('#test').trigger('click', true); 
}); 

Cập nhật: dữ liệu thuộc tính có thể chứa JSON hợp lệ được tự động chuyển sang một đối tượng (demo):

<div class="test" data-args='{ "quantity": 1, "type": "pizza", "extra1": "peperoni", "extra2": "cheese", "extra3": "cheesy bread" }'>Click Me</div> 

Lưu ý rằng data-arg sử dụng một trích dẫn duy nhất để chứa JSON, nhưng JSON bên trong PHẢI sử dụng dấu ngoặc kép xung quanh mỗi khóa và giá trị (trừ khi nó là số).

Sau đó, sử dụng phương pháp dữ liệu để trích xuất các thông tin:

var args = $(this).data('args'); 

Ngoài ra, bạn có thể làm cho một dữ liệu thuộc tính riêng biệt cho mỗi đối số (demo):

<div class="test" data-quantity="1" data-type="pizza" data-extra1="peperoni" data-extra2="cheese" data-extra3="cheesy bread">Click Me</div> 

Sau đó sử dụng thu thập tất cả dữ liệu từ phần tử như sau:

var args = $(this).data(); 
+0

Chức năng onclick thực sự không bị ràng buộc bằng cách sử dụng jquery. Vì vậy, điều này không giúp trong trường hợp của tôi đã sửa đổi bản demo của bạn http://jsfiddle.net/hQAWv/. – druveen

+0

Không cần sử dụng 'onclick', bạn có thể thêm đối số cụ thể vào thuộc tính dữ liệu và lấy chúng theo cách đó. – Mottie

+0

hoặc [làm điều này] (http://jsfiddle.net/Mottie/hQAWv/1/): 'hàm trigger_fn (e) {test_fn (e, true); } ' – Mottie

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