Làm cách nào để đặt lại biểu mẫu bằng plugin đã chọn của jQuery?


80

Tôi có một loạt các selectphần tử trong một biểu mẫu mà tôi đang sử dụng plugin Jquery Chosen . Làm cách nào để đặt lại biểu mẫu? Cách sau không hoạt động:

<input type="reset" />

2
Bạn nên thay đổi câu trả lời được chấp nhận của mình thành câu trả lời của Jack O'Neill. Các giải pháp khác không hoạt động nữa.
James

1
Vui lòng thay đổi câu trả lời được chấp nhận của bạn thành câu trả lời Jack O'Neill. bởi vì trình kích hoạt phiên bản mới nhất hiện được gọi là: đã cập nhật
Well Wisher

1
@Jame & Well khôn hơn: Không phải chúng tôi sẽ thay đổi tất cả các câu hỏi đã trả lời trên trang web này bất cứ khi nào cập nhật plugin. Giải pháp đã đúng vào thời điểm đó. RobertWaddell đã bình luận về câu trả lời, tôi tin rằng đây là cách để đi.
GôTô

Câu trả lời:


188

Bạn sẽ cần phải đặt lại giá trị của trường, sau đó kích hoạt liszt:updatedsự kiện trên đầu vào để khiến nó cập nhật, tôi đã thực hiện một thao tác với một ví dụ hoạt động ở đây.

http://jsfiddle.net/VSpa3/3/

$(".chzn-select").chosen();
$('a').click(function(){
    $(".chzn-select").val('').trigger("liszt:updated");
});​

Kể từ khi phát hành v1.0 đã chọn, trình kích hoạt hiện được gọi là 'đã chọn: đã cập nhật'. Bất kỳ ai sử dụng phiên bản mới này đều cần kích hoạt cập nhật bằng

$(".chosen-select").val('').trigger("chosen:updated");

15
Câu trả lời tốt! Với phiên bản mới nhất của Chosen, điều này cần được "(" lựa chọn: cập nhật ")"
Robert Waddell

2
Câu trả lời chính xác! Nhưng có thể đặt lại và hiển thị lại trình giữ chỗ ban đầu không?
Niels Sønderbæk

1
Vẫn không làm việc. Tôi đang thay thế động lựa chọn của mình thông qua các cuộc gọi Ajax (phương thức jQuery load ()). Sau đó, phát hành một lựa chọn mới (). Trigger ("đã chọn: đã cập nhật"); và không hoạt động. Tìm kiếm đã chọn vẫn không hoạt động trên lựa chọn mới.
Marco Marsala

Khi sử dụng điều này cho các trường chọn 'nhiều: đúng', nó dường như cũng loại bỏ Trình giữ chỗ. Bạn có biết cách nào để giữ lại Trình giữ chỗ sau khi xóa không?
David Basalla

1
Ah nghĩ rằng tôi đã tìm thấy nó ... $selectField.val([]).trigger('chosen:updated')có vẻ như là một trò lừa
David Basalla

52

Kể từ khi phát hành v1.0 đã chọn, trình kích hoạt hiện được gọi là 'đã chọn: đã cập nhật'. Bất kỳ ai sử dụng phiên bản mới này đều cần kích hoạt cập nhật bằng

$(".chosen-select").val('').trigger("chosen:updated");

1
Đây phải là câu trả lời chính xác do những thay đổi. Không có giải pháp nào khác mà tôi thấy hoạt động chính xác. Cảm ơn bạn!
James

1
Nhưng không hoạt động! Nếu vùng chọn được thay thế tự động bằng một phương thức select (jQuery load ()) khác có cùng id / tên, thì tính năng tìm kiếm sẽ ngừng hoạt động trên vùng chọn mới. Đã thử gọi .chosen () trên lựa chọn mới, gọi .chosen ('tiêu diệt'), gọi .trigger ("đã chọn: đã cập nhật") và các kết hợp của chúng.
Marco Marsala

14

Bạn có thể thử điều này:

$('select').chosen('destroy');  

$('select').prop("selectedIndex", -1);   
$('select').chosen();

11

để thiết lập lại hoạt động tự nhiên, hãy sử dụng:

$("input[type='reset'], button[type='reset']").click(function(e){
    e.preventDefault();

    var form = $(this).closest('form').get(0);
    form.reset();

    $(form).find('select').each(function(i, v) {
        $(v).trigger('chosen:updated');
    });
}

1
Sử dụng form.reset () và sau đó kích hoạt đã chọn: cập nhật là giải pháp tốt nhất, đặc biệt nếu bạn muốn trình bày biểu mẫu như được hiển thị ban đầu. Đặt .val ('') không trả biểu mẫu về các giá trị mặc định.
Just Plain High

Điều này đang hoạt động. Hãy nhớ đặt lại thủ công các hộp kết hợp (chọn) được thêm tự động vào DOM.
Marco Marsala


0

Để có một cách tiếp cận không phức tạp hơn ... giả sử thông tin đầu vào của bạn nằm trong <form>các thẻ:

<form>
    <!-- your selects go here and any other input fields -->
    <input type="reset" value="Reset"> 
</form>

Đây là những gì tôi sẽ làm:

$("input[type='reset'], button[type='reset']").click(function(e){
      setTimeout(function(){ $("select").trigger("chosen:updated"); }, 50);
});

Xem fiddle tại đây .


@MarcoMarsala nếu bạn nhìn vào fiddle, nó hoạt động. Làm thế nào để mã của bạn khác với fiddle?
lập trình viên

1
Tôi đã cập nhật lên 1.2.0 và tất cả bắt đầu hoạt động mà không phức tạp. Tôi thậm chí không cần setTimeout. Có lẽ là một lỗi trong 1.12
Marco Marsala

0

Không có tùy chọn nào trước đây phù hợp với tôi. Tôi đã phải làm điều đó giống như trường học cũ, thậm chí sử dụng một số javascript bản địa, đây là mã:

$('#dllSample option').each(function(){
     $(this)[0].selected = false;   
});
$("#dllSample").trigger("chosen:updated");

0

Không có câu trả lời nào ở đây phù hợp với tôi. Tôi đang sử dụng lựa chọn đã chọn với nhiều thuộc tính. Nút biểu mẫu gửi bình thường cũng không làm được thủ thuật. Vì vậy, tôi chỉ có một chức năng làm điều này khi nhấp chuột.

//Gets the selected values
var selected = [];
    for (var option of document.getElementById('mySelect').options) {
        if (option.selected) {
            selected.push(option.value);
        }

    }

//Resets the form
document.getElementById('form1').reset();

//Chosen values doesnt get reset, so we do this manually
//Removes the values selected by clicking on the x icon
$link = $('a.search-choice-close');
            var i;
            for (i = 0; i < selected.length; i++) {
                $link[i].click();
            }

-1

Đôi khi bạn phải đặt lại lựa chọn đã chọn được gọi.

tôi làm việc này

jQuery.fn.chosen_reset = function(n){
  $(this).chosen('destroy');
  $(this).prop('selectedIndex', 0);
  $(this).chosen(n)
}

Và gọi hàm này như thế này, với các tùy chọn như một đối số

$('select').chosen_reset({width:'369px'});

-2

Trong jQuery, một cái gì đó như thế này sẽ hoạt động

<input name="Text1" id="something" type="text">

<input type="reset" id="reset_me"/>


$("#reset_me").click(function() { 
$("#something").val("");
});

$ j ('. chzn-select'). each (function () {$ j (this) .val ("")}); không xóa các thẻ trong phần đã chọn
PH

@PH nếu bạn có thể đưa ra một ví dụ về mã của bạn để chúng tôi giúp đỡ
MHowey

sottenad chỉ trả lời điều này, xin vui lòng tham khảo liên kết jsfiddle của mình ở trên. bây giờ mã của tôi trông giống như $ j ('. chzn-select'). each (function () {$ j (this) .val (""). trigger ("liszt: updated");});
PH
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.