Câu hỏi này nhằm mục đích phát triển các plugin jQuery và các đoạn mã JavaScript khép kín khác mà không yêu cầu sửa đổi các tệp kịch bản khác để tương thích.Có cách [phổ quát] để gọi hành động mặc định sau khi gọi event.preventDefault() không?
Chúng ta đều biết event.preventDefault() sẽ ngăn sự kiện mặc định để chúng tôi có thể chạy chức năng tùy chỉnh. Nhưng điều gì sẽ xảy ra nếu chúng tôi muốn đơn giản là trì hoãn sự kiện mặc định trước khi gọi nó? Tôi đã nhìn thấy nhiều thủ thuật ninja và các cách giải quyết khác nhau để gọi lại hành động mặc định, nhưng như tôi đã nói, sở thích của tôi là theo cách phổ quát để kích hoạt lại mặc định và không xử lý các trình kích hoạt mặc định theo từng trường hợp.
$(submitButton).click(function (e) {
e.preventDefault();
// Do custom code here.
e.invokeDefault(); // Imaginary... :(
});
Ngay cả đối với một cái gì đó đơn giản như gửi biểu mẫu, có vẻ như không có câu trả lời chung. Cách giải quyết $(selector).closest("form").submit()
giả định rằng hành động mặc định là một biểu mẫu tiêu chuẩn gửi và không phải là một cái gì đó lập dị như hàm __doPostBack()
trong ASP.NET. Để kết thúc cách gọi callbacks ASP.NET, đây là gần nhất tôi đã đi đến một vũ trụ, set-it-và-quên-nó giải pháp:
$(submitButton).click(function (e) {
e.preventDefault();
// Do custom code here.
var javascriptCommand = e.currentTarget.attributes.href.nodeValue;
evalLinkJs(javascriptCommand);
});
function evalLinkJs(link) {
// Eat it, Crockford. :)
eval(link.replace(/^javascript:/g, ""));
}
Tôi cho rằng tôi có thể bắt đầu viết các trường hợp đặc biệt để xử lý các liên kết bình thường với một chuyển hướng window.location
, nhưng sau đó chúng tôi đang mở một thùng hoàn toàn mới của các sâu - chồng chất ngày càng nhiều trường hợp để yêu cầu sự kiện mặc định tạo ra nhiều vấn đề hơn các giải pháp.
Vì vậy, làm thế nào về nó? Ai có viên đạn ma thuật mà tôi đang tìm kiếm?
tôi không thực sự có được những gì bạn đang cố gắng để làm ... không làm sự kiện mã handler chạy * trước * hành động mặc định xảy ra (ví dụ: mã trình xử lý sự kiện 'submit' sẽ chạy trước khi biểu mẫu thực sự được gửi ... không phải là những gì bạn đang cố gắng đạt được?) –
Mã tùy chỉnh của bạn có đồng bộ không? điều này có thể giải thích lý do tại sao bạn cảm thấy bạn cần một phương pháp như vậy, nhưng thậm chí có phương pháp tưởng tượng đó sẽ không giải quyết được vấn đề của bạn. – agradl
Bạn chắc chắn cần phải rõ ràng hơn về những gì bạn muốn. Nếu bạn muốn chạy mã trong trình xử lý, mã đó sẽ chạy trước hành vi "mặc định". –