2009-12-15 58 views
16

tôi có chức năngjquery chức năng cuộc gọi bằng tên

<script type="text/javascript"> 
    $(function() { 
     $("#search").click(function() { 
      var text = $("#searchText").val(); 
      $.getJSON("Search", { world: text, filter: text }, function(data) { 
       $("tr.DataRow").toggle(false); 
       for (i = 0; i < data.length; i++) { 
        $("#obj" + data[i]).toggle(true); 
       } 
      }); 
     })    
    }); 


</script> 

bây giờ tôi có một chức năng

<script type="text/javascript"> 

    $(function() { 
     $('#searchText').bind('keypress', function(e) { 
      if (e.keyCode == 13) { 

      } 
     }); 
    }); 
</script> 

làm thế nào tôi có thể gọi hàm đầu tiên từ chức năng thứ hai?

+13

@kusanagi Được coi là lịch sự phù hợp để đánh dấu câu trả lời đúng cho câu hỏi của bạn là "được chấp nhận". Bạn đã hỏi 11 câu hỏi, vì vậy nó sẽ rất dễ dàng để quay trở lại thông qua họ và chấp nhận tất cả các câu trả lời đúng. Điều này sẽ khuyến khích mọi người trả lời đầy đủ các câu hỏi của bạn và không cần đặt trước. –

Trả lời

21

Bạn có thể nâng cao một sự kiện click vào phần tử bạn đã đăng ký chức năng đầu tiên

<script type="text/javascript"> 

    $(function() { 
     $('#searchText').bind('keypress', function(e) { 
      if (e.keyCode == 13) { 
       $('#search').click(); // Raise a click event on #search element 
      } 
     }); 
    }); 
</script> 
+1

+1 cho giải pháp đơn giản nhất cho câu hỏi được hỏi. Câu trả lời chính xác! –

1

bạn có thể đặt tên cho nó? tui bỏ lỡ điều gì vậy?

chỉnh sửa: để có được quyền này

<script type="text/javascript"> 
function() myfunction{ 
    var text = $("#searchText").val(); 
    $.getJSON("Search", { world: text, filter: text }, function(data) { 
     $("tr.DataRow").toggle(false); 
     for (i = 0; i < data.length; i++) { 
      $("#obj" + data[i]).toggle(true); 
     } 
    }); 
} 

$(function(){ 
    $("#search").click(myfunction); 
}); 
</script> 

và sau đó

<script type="text/javascript"> 

$(function() { 
    $('#searchText').bind('keypress', function(e) { 
     if (e.keyCode == 13) { 
      myfunction(); 
     } 
    }); 
}); 
</script> 
+0

Điều đó sẽ không hoạt động. Khi bạn khởi tạo một hàm như là một phần của một biểu thức, cho nó một tên sẽ cung cấp một cách để hàm gọi chính nó một cách đệ quy, nhưng nó sẽ không thiết lập tên đó làm thuộc tính của đối tượng cửa sổ (hoặc bất kỳ đối tượng nào khác). – Pointy

+0

@ RamboNo5 Tất cả 'myfunction()' được kích hoạt là sự kiện ràng buộc của phần tử '# search', chứ không phải chính hành động nhấp chuột. –

+0

Ok cảm ơn! Tôi đã chỉnh sửa mã. Bây giờ nó sẽ hoạt động đúng như mong đợi? Giải pháp của bạn trơn tru hơn nhiều, mặc dù :) – RamboNo5

12
// first function 
$(function() { 
    $.yourFavoriteFunctionName = function() { 
    // the code for the first function 
    }; 
    $.yourFavoriteFunctionName(); 
}); 

sau đó

// second function 
$(function() { 
    // whatever 
    if (foo) 
    $.yourFavoriteFunctionName(); 
20

Giải nén logic từ xử lý sự kiện đầu tiên vào một hàm có tên:

function doSearch() { 
    var text = $("#searchText").val(); 
    $.getJSON("Search", { world: text, filter: text }, function(data) { 
     $("tr.DataRow").toggle(false); 
     for (i = 0; i < data.length; i++) { 
      $("#obj" + data[i]).toggle(true); 
     } 
    }); 
} 

Bây giờ bạn có thể vượt qua doSearch bởi tên cho trình xử lý nhấp chuột:

$(function() { 
     $("#search").click(doSearch); 
    }); 

và gọi một cách rõ ràng từ bên trong trình xử lý khóa:

$(function() { 
     $('#searchText').bind('keypress', function(e) { 
      if (e.keyCode == 13) { 
       doSearch(); 
      } 
     }); 
    }); 
+0

Đây là cách chính xác để đi – PetersenDidIt

+0

... ngoại trừ việc bạn đã làm ô nhiễm không gian tên chung thay vì mở rộng đối tượng jQuery. – Pointy

+0

@Pointy - Nếu bạn bắt đầu xử lý đối tượng jQuery như là một không gian tên chung trên thực tế, bạn sẽ gặp phải các vấn đề tương tự như làm cho tất cả các biến của bạn toàn cầu. Điều gì sẽ xảy ra khi chúng ta viết hàm 'each()'? – harto

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