2013-08-29 36 views
8
<script> 
    $(document).ready(function(){ 
    //Load City by State 
    $('#billing_state_id').live('change', function() { 
     //do something 
    }); 
    $('#click_me').live('click', function() { 
     //do something 
     //need to recall $('#billing_state_id').live('change', function() { but how? 
    }); 
    }); 
</script> 

Tải thành phố theo trạng thái hoạt động tốt nhưng tôi không biết có thể hay không gọi nó trong một chức năng khác như $('#click_me').live('click', function().cách gọi chức năng từ một chức năng khác trong Jquery

+1

'.live' không được dùng nữa, sử dụng' on' (kiểm tra trang hướng dẫn trên đó, nó rất mô tả. Hơn nữa, jQuery chỉ là JavaScript .. Bạn gọi một hàm giống như bạn sẽ ở bất kỳ điểm nào khác với JS –

+1

Tôi đề nghị bạn sử dụng hàm on() với hàm live(). Vì trực tiếp không còn được dùng nữa. –

+0

Vâng, tôi đã quyết định khôi phục câu trả lời của mình. Thật vậy, tôi không biết tại sao tôi nên công bằng trong khi những người khác thì không. Hơn nữa, có quá nhiều downvotes về câu hỏi này và tôi không thấy bất kỳ lý do tốt cho điều đó. – leaf

Trả lời

9

Tôi cho rằng bạn không muốn rebind sự kiện, nhưng hãy gọi trình xử lý.

Bạn có thể sử dụng trigger() để kích hoạt sự kiện:

$('#billing_state_id').trigger('change'); 

Nếu xử lý của bạn không dựa vào bối cảnh sự kiện và bạn không muốn kích hoạt xử lý khác đối với sự kiện này, bạn cũng có thể đặt tên cho chức năng :

function someFunction() { 
    //do stuff 
} 

$(document).ready(function(){ 
    //Load City by State 
    $('#billing_state_id').live('change', someFunction); 
    $('#click_me').live('click', function() { 
     //do something 
     someFunction(); 
    }); 
    }); 

Cũng lưu ý rằng live() bị phản đối, on() là cải tiến mới.

+0

Cách tiếp cận tốt hơn là chỉ cần thực hiện các chức năng có tên và không vô danh. Điều này cũng sẽ kích hoạt tất cả các trình xử lý khác gắn liền với sự kiện này. –

+0

Điều đó phụ thuộc vào mục đích. có lẽ nó cần phải kích hoạt các trình xử lý khác gắn liền với sự kiện này. –

+0

Đó là một khả năng, nhưng nó không có vẻ như những gì OP đang cố gắng làm từ mô tả của mình trong câu hỏi. –

2

bọc bạn chia sẻ mã vào chức năng khác:

<script> 
    function myFun() { 
     //do something 
    } 

    $(document).ready(function(){ 
    //Load City by State 
    $(document).on('change', '#billing_state_id', function() { 
     myFun(); 
    }); 
    $(document).on('click', '#click_me', function() { 
     //do something 
     myFun(); 
    }); 
    }); 
</script> 
+1

Tại sao bạn gói hàm bằng một hàm khác? Bạn chỉ có thể thực hiện 'click', myFun);' cũng lưu ý, '.live' không được chấp nhận. –

+2

@BenjaminGruenbaum: đó là thiết kế sạch hơn. rõ ràng gọi một trình xử lý sự kiện (thay vì chờ các sự kiện được gửi đến nó), gợi ý mạnh mẽ về một số chức năng ngoài việc xử lý tương tác người dùng ('logic nghiệp vụ', nếu bạn muốn nói) và độc lập với ngữ nghĩa của sự kiện. phần mã này do đó nên được thừa nhận, chỉ cần tưởng tượng các bổ sung sau này về việc xử lý nhiều hơn cho trình xử lý sự kiện 'thay đổi' mà _is_ riêng cho sự kiện này. trực tiếp gọi trình xử lý từ các phần mã khác sẽ phá vỡ ứng dụng theo cách khó phát hiện. – collapsar

+0

Tôi nghĩ rằng bạn trộn lẫn những gì tôi đã cố gắng để nói không có nghĩa là bạn nên sử dụng '.click()' hoặc '.change()' để kích hoạt sự kiện theo cách thủ công (Xem bình luận của tôi trên câu trả lời khác). Những gì tôi đã nói về là viết 'myFun' thay vì' function() {myFun()} 'vì' myFun' là _already_ một hàm và bạn đang gói nó trong một biểu thức hàm ẩn danh khác vì một lý do vượt ra khỏi tôi:) Điều thứ hai tôi nói là '.live' không được chấp nhận (Kể từ jQuery 1.7 nếu tôi nhớ chính xác) và không nên được sử dụng trong mã mới. '.on' nên được ưu tiên hơn. –

0

Tôi nghĩ rằng trong trường hợp này, bạn muốn một cái gì đó như thế này:

$(window).resize(resize=function resize(){ some code...} 

Bây giờ u có thể gọi thay đổi kích thước() trong một số chức năng lồng nhau khác:

$(window).scroll(function(){ resize();} 
Các vấn đề liên quan