Truyền tham số trên JQuery .trigger


82

Tôi đang sử dụng trình kích hoạt JQuery nhưng không chắc cú pháp chính xác là gì để chuyển các tham số trong tình huống của tôi. Đây là nơi tôi đang thực hiện cuộc gọi:

$('#'+controlName).trigger(event);

Đây là nơi tôi đang thực hiện ràng buộc sự kiện:

$(window).on('onPartialRendered', onPartialRendered);

Và đây là trình xử lý sự kiện của tôi:

var onPartialRendered = function () {

    .....
};

Mọi thứ hoạt động tốt cho đến khi tôi cố gắng chuyển các tham số. Cách chính xác để làm điều đó theo ví dụ của tôi là gì?


Có, tôi đã thử chuyển các tham số bằng cú pháp có kích hoạt (event, ['Param1', 'Param2']) nhưng không thành công
user517406

Của bạn onPartialRenderedkhông có bất kỳ thông số nào trong chữ ký của nó. Nó nên được onPartialRendered = function(e, p1, p2).
Rocket Hazmat

@ user517406 bạn đã thử chuyển các tham số không hoạt động như thế nào?
epascarello

@ user517406 cố gắng đăng một số mã trong jsfiddle.net để chúng tôi chơi cùng.
Edper

Câu trả lời:


151

Tham số đầu tiên luôn là chuỗi với tên sự kiện và các tham số tiếp theo là dữ liệu bổ sung:

.trigger('foo', [1, 2]);

.on('foo', function(event, one, two) { ... });

Cảm ơn đặc biệt dành cho Rocket Hazmat

Thí dụ:

var controller = {
  listen: function (event, json, string) {}
};

$('body').trigger('this_works', [{data: [1, 2, 3]}, 'something']);

$('body').on('this_works', function (event, json, string) {
  controller.listen(event, json, string);
});

Một phần từ xa:

Vui lòng không sử dụng cách này. Có rất nhiều bài báo về vấn đề này trong mạng. Điều này mất nhiều thời gian và tạo ra lưu lượng không cần thiết trong mạng. Vui lòng sử dụng cách này:

var template = $('#templates #example_template').detach();
var clone = template.clone();
clone.find('.some_field').val('new_data');
clone.attr('id', null);
$('table tbody').append(clone);

11
Không hẳn. .triggerchỉ mất 2 đối số. Bạn cần truyền một mảng (hoặc đối tượng) tham số.
Rocket Hazmat

Cú pháp chính xác sẽ là gì nếu tôi muốn tách ràng buộc sự kiện khỏi trình xử lý sự kiện như trong ví dụ của tôi?
user517406

Bạn có thể vui lòng cho một ví dụ cú pháp, sử dụng cú pháp này không hoạt động: EVENT BINDING $ (window) .on ('onPartialRendered', onPartialRendered (p1, p2)); TRÌNH XỬ LÝ SỰ KIỆN var onPartialRendered = function (p1, p2) {...}
user517406

2
@ user517406 Đó hoàn toàn là cách sai để chuyển một tham chiếu hàm làm trình xử lý sự kiện. Thêm các tham số mà bạn đang xác định hàm. var onPartialRendered = function (event,one,two) {
Kevin B

2
Chỉ cần thay đổi trình kích hoạt thành sau: $ ('body'). Trigger ({type: 'this_works', data: [1,2,3], message: 'something'}) ;. Trình xử lý vẫn có thể chỉ có hàm (sự kiện) trong đó và nhận các tham số bằng cách nêu rõ event.data và event.message.
linnium
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.