2009-12-18 32 views
6

Tôi có một đối tượng hộp chọn và một hàm ajax được gọi là OnChange sử dụng giá trị đã chọn làm đầu vào. Tôi cũng muốn gọi hàm giống nhau khi hộp chọn được tải lần đầu tiên. Tôi sử dụng jQuery .load, nhưng hàm ajax được gọi trước khi bất kỳ tùy chọn nào được nạp và đầu vào cho hàm ajax của tôi là không xác định. Có ai biết làm thế nào để có được jQuery để chờ đợi cho tất cả các tùy chọn để tải trước khi gọi chức năng?jQuery đợi cho tất cả các tùy chọn được chọn để tải

Cảm ơn.

Chỉnh sửa - Thêm mã Tôi nhận thấy rằng setTimeout() hoạt động khá tốt để trì hoãn chức năng. Tuy nhiên, tôi lo lắng khi sử dụng setTimeout() vì nếu trang tải chậm hơn bình thường, trang sẽ không hoạt động. Tôi đã thử thay thế thời gian chờ bằng $(document).ready như bạn đã đề xuất, nhưng chức năng vẫn được gọi trước khi một tùy chọn được chọn và đầu vào không được xác định.

Dưới đây là các mã:

<script type="text/JavaScript">  
    setTimeout('AjaxFunction($("#SelectID option:selected").val()));', 400); 
</script> 

<select id="SelectID" name="SelectName" onchange="AjaxFunction(this.value);"> 
<option value='Inland Empire'>Inland Empire</option> 
<option value='San Bernardino'>San Bernardino</option> 
<option value='Riverside'>Riverside</option> 
<option value='California'>California</option> 
</select> 
+0

Brian, bạn nên cung cấp thêm thông tin về cách các tùy chọn được chọn được tải. Có nguồn gốc từ một trong các ý kiến ​​của bạn dưới đây, nó được thực hiện thông qua ajax. –

+0

Là '

9

Bạn có thể hiển thị một số mã mà bạn có cho đến nay? Sử dụng hàm ready() của jQuery sẽ thực hiện những gì bạn muốn. Về cơ bản nó chờ đợi cho toàn bộ DOM tải trước khi nó thực thi.

$(document).ready(function(){ 
    //code here runs after the DOM is created 
}); 
+1

Tôi không tin rằng điều này làm việc cho OP - họ dường như đang tải '

3

nếu bạn sử dụng jquery.load để tải lần đầu tiên nội dung của chọn hộp tim đầu tiên e thì bạn nên sử dụng tham số callback của hàm tải thêm ajaxFunction của bạn ..

vì vậy ..

bất cứ nơi nào/bất cứ khi nào bạn gọi hàm tải làm điều đó như thế này

$("some_selector_where_you_load_the_select_box") 
.load("somepage.htm", 
     function(){ AjaxFunction($("#SelectID option:selected").val()); } 
    ); 

cũng thay gọi chính AjaxFunction, bạn chỉ có thể kích hoạt sự kiện thay đổi và để hộp chọn xử lý AjaxFunction trên chính nó .. (hữu ích nếu bạn làm điều này với nhiều hộp chọn)

sẽ là

$("some_selector_where_you_load_the_select_box") 
.load("somepage.htm", 
     function(){ $("#SelectID").change(); } 
    ); 
+1

+1 cho thay đổi() và để sử dụng gọi lại với tải(). Đoán đó là giải pháp đúng vì các tùy chọn chọn đang được nạp với ajax. –

1

Cách tốt nhất để thực hiện điều này là để trì hoãn các thiết lập của về biến đổi kích hoạt chọn và tự động cho biết phải làm gì khi thay đổi. Để làm cho nó cháy ngay khi bạn chỉ sử dụng hàm change().Vì vậy, đây là hình thức của nó:

$(document).ready(function(){ 

    //At this point the select should be fully built, dynamically add the on change handler. 

    $('#SelectID').change(AjaxFunction); 

    //Fire the change event immediately. 

    $('#SelectID').change(); 
}); 
Các vấn đề liên quan