2013-08-08 43 views
5

Tôi đang cố gắng gọi url từ xa của tôi với các thuộc tính được thêm vào url.Bootstrap 3 typeahead.js - thuộc tính url từ xa

Để bây giờ tôi đã làm việc này:

$('#league').typeahead({ 
     remote: '/typeahead/get_league?query=%QUERY', 
     limit: 10 
}); 

Bây giờ tôi muốn làm một cái gì đó như thế này:

$('#league').typeahead({ 
     remote: function() { 
      var q = '/typeahead/get_league?query=%QUERY'; 
      if ($('#sport').val()) 
       q += "&sport=" + encodeURIComponent($('#sport').val()); 
      return base_url + q; 
     }, 
     limit: 10 
}); 

Tôi muốn thêm thuộc tính GET 'thể thao' vào URL để Tôi có thể thu hẹp truy vấn của mình trên chương trình phụ trợ. Tôi đã thử mã ở trên nhưng tôi nhận được một lỗi JS.

Phiên bản trước của Bootstrap Typeahead cho phép loại thiết lập này. Nó rất hữu ích vì tôi có thể cập nhật URL từ xa mỗi khi một phím được nhấn.

Bất kỳ ý tưởng nào về cách thực hiện công việc đó cho phiên bản này?

Trả lời

10

remote là dành riêng cho typeahead.js (không phải là một phần của Bootstrap). Nhưng bạn không sử dụng chính xác remote, nó có thể là chuỗi hoặc một đối tượng , không phải chức năng.

Khi bạn cần thay đổi URL yêu cầu, bạn có thể sử dụng replace:

$('#league').typeahead({ 
    remote: { 
     url: '/typeahead/get_league?query=%QUERY', 
     replace: function() { 
      var q = '/typeahead/get_league?query=%QUERY'; 
      if ($('#sport').val()) { 
       q += "&sport=" + encodeURIComponent($('#sport').val()); 
      } 
      return base_url + q; 
     } 
    }, 
    limit: 10 
}); 

Kiểm tra các tài liệu here

Hy vọng nó giúp.

+0

Tôi đang sử dụng typeahead.js. Vấn đề của tôi xuất phát từ thực tế là tôi không thể sử dụng chức năng. Vì tôi cần đặt URL của mình tại init, #sport chưa chứa bất kỳ giá trị nào. Đó là lý do tại sao tôi muốn đặt nó mỗi khi tôi nhấn một phím và không đi trước thời gian ... Tôi đã có thể làm điều đó bằng cách sử dụng bootstrap 2.0 typeahead, bây giờ với typeahead.js tôi không thể ... đó là một nhược điểm lớn. Bất kỳ ý tưởng nào về cách tôi có thể giải quyết vấn đề đó? – koxon

+0

Tôi hiểu, có bạn có thể. Tôi đã cập nhật câu trả lời của mình. –

+0

Cảm ơn sự giúp đỡ! chắc chắn sẽ hoạt động. – koxon

1

Dưới đây là ví dụ hoàn chỉnh với kết quả QUERY cũng được chuyển. Lưu ý rằng khi phương thức từ xa được sử dụng, thay thế biến không còn hoạt động nữa. Nhờ có hieu-nguyen cho phần lớn số tiền đó!

jQuery('#city').typeahead({ 
    name: "cities", 
    remote: { 
     url: current_web_root + '?action=ajax|getcities&query=%QUERY', 
     replace: function() { 
      var q = current_web_root + '?action=ajax|getcities&query=' + jQuery('#city').val(); 
      if (jQuery('#state').val()) { 
       q += "&state=" + encodeURIComponent(jQuery('#state').val()); 
      } 
      return q; 
     } 
    },  
    cache: false 
}); 

jQuery("#state").change(function (e) { 
    jQuery('#city').val(""); 
}); 
4

Giải pháp Hiếu Nguyễn sẽ không hoạt động cho% QUERY ký tự đại diện. Theo tài liệu về Bloodhound.js,

thay thế - .... Nếu được đặt, không có thay thế ký tự đại diện nào được thực hiện trên url.

Bloodhound docs on github

Vậy% QUERY sẽ được thông qua như là chuỗi mà không được thay thế bằng văn bản nhập từ người dùng.

Vì vậy, bạn nên đặt giá trị typeahead vào url của bạn:

$('#league').typeahead({ 
remote: { 
    url: '/typeahead/get_league?query=%QUERY', 
    replace: function() { 
     var q = '/typeahead/get_league?query=' + $('#league').val(); 
     if ($('#sport').val()) { 
      q += "&sport=" + encodeURIComponent($('#sport').val()); 
     } 
     return base_url + q; 
    } 
}, 
limit: 10 

});

+2

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của riêng bạn và sau khi bạn có đủ [danh tiếng] (http://stackoverflow.com/help/whats-reputation), bạn sẽ có thể [nhận xét về bài đăng bất kỳ] (http://stackoverflow.com/help/privileges/comment). – fredtantini

+0

@fredtantini: Tôi không thể thêm nhận xét, vì vậy tôi phải tạo một bài đăng. Chắc chắn bạn có thể đóng phản hồi trên cơ sở "hình thức", nhưng lần sau hãy dành thời gian để hiểu bài đăng và cuối cùng báo cáo nội dung đó là nhận xét, vì đôi khi cân nhắc từ những người dùng mới như tôi có thể tiết kiệm rất nhiều thời gian cho những người đọc phản hồi được đánh dấu là được chấp nhận. – aKiRa

+0

Cảm ơn bạn aKira, điều này làm việc cho tôi. –