2012-06-22 28 views
21

Tôi đang sử dụng knockoutjs và tôi hiện đang có một cái gì đó trong quan điểm của tôi trông như thế này:knockoutjs lấy id yếu tố thông qua sự kiện click

<img id="myTab1" data-bind="click: pressedTab.bind($data, '#myTab1')" src="images/image1.png"></img> 

này cho phép tôi để có được ID phần tử trong mô hình quan điểm của tôi:

pressedTab = function(tab){ 
    console.log("Element ID: " + tab); 
} 

này viết:

ID yếu tố: # myTab1

Tuy nhiên, quá lặp lại để gửi tên id img trong sự kiện nhấp chuột. Có cách nào để gửi id img mà không viết lại nó một cách rõ ràng không?

+0

Dưới đây liên kết làm việc cho tôi với ràng buộc http knock-out: // stackoverflow .com/questions/31513689/knockout-to-get-the-thuộc tính-giá trị-onclick-function/31514589 # 31514589 –

Trả lời

53

Bạn thực sự có thể truy cập đối tượng sự kiện thông qua trình xử lý nhấp chuột KO.

<button id="somebutton" data-bind="click: log">Click Me </button> 

var ViewModel = function() { 
    this.log = function(data, event) { 
     console.log("you clicked " + event.target.id); 
    } 
}; 
ko.applyBindings(new ViewModel()); 

http://jsfiddle.net/madcapnmckay/e8JPT/

Hope this helps.

+0

Đây chính xác là những gì tôi cần. Cảm ơn rất nhiều! – bdev

+0

cảm ơn bạn. điều này đã cứu tôi khỏi một số tóc kéo – solefald

+0

bỏ lỡ điều này trong tài liệu loại trực tiếp. Cảm ơn – geedubb

13

Câu trả lời của madcapnmckay không hoàn toàn chính xác. Bạn có thể sử dụng currentTarget tốt hơn: nó sẽ trả về phần tử bound ban đầu thay vì một phần tử con, khi bạn có một div với các phần tử lồng nhau trong nó.

Xem này question

Cập nhật

Như @Ryan đề cập - event.currentTarget không có sẵn cho IE8. Đối với < = hỗ trợ IE8 bạn có thể sử dụng:

var target = (event.currentTarget) ? event.currentTarget : event.srcElement; 
+0

Tôi đồng ý. vm.yourFn = function (dữ liệu, sự kiện) { \t \t \t \t \t \t var $ target = $ (event.currentTarget) ... hoạt động tốt. – rball

+1

Xin lưu ý rằng nếu bạn cần hỗ trợ IE <9, currentTarget không khả dụng cho các phiên bản đó. – Ryan

+0

Bạn nói đúng. Tôi đã cập nhật câu trả lời! –

1

Html Binding

<input type="checkbox" data-bind="attr:{id: $data.Id , Qref: '3177'} , click: $root.answerClick">&nbsp;&nbsp;&nbsp;<span data-bind="text: $data.Text , attr:{id: $data.Id}"></span> 

js đang

answerClick: function(c, event){ 
     var element = event.target; 
     var qref = element.getAttribute('Qref'); 
     var click_id = element.id; 
     return true; 
    } 
Các vấn đề liên quan