フォームの1つでJQueryオートコンプリートを使用しています。
基本フォームは、データベースから製品を選択します。これはうまく機能しますが、特定の郵便番号から出荷された製品のみが返されるように、さらに開発したいと思います。バックエンドスクリプトを把握しました。このスクリプトに郵便番号を渡すための最善の方法を見つける必要があります。
これが私のフォームの見た目です。
<form>
<select id="zipcode">
<option value="2000">2000</option>
<option value="3000">3000</option>
<option value="4000">4000</option>
</select>
<input type="text" id="product"/>
<input type="submit"/>
</form>
次に、JQueryコードを示します。
$("#product").autocomplete
({
source:"product_auto_complete.php?postcode=" + $('#zipcode').val() +"&",
minLength: 2,
select: function(event, ui){
//action
}
});
このコードはある程度機能します。ただし、実際に選択される値に関係なく、最初の郵便番号の値のみを返します。何が起こっているのかと思いますが、ソースURLは、選択メニューが変更されたときではなく、ページの読み込み時にプライミングされます。これを回避する方法はありますか?または、私が望んでいる結果を達成するための全体的なより良い方法はありますか?
次のように、source
呼び出しに別のアプローチを使用する必要があります。
$("#product").autocomplete({
source: function(request, response) {
$.getJSON("product_auto_complete.php", { postcode: $('#zipcode').val() },
response);
},
minLength: 2,
select: function(event, ui){
//action
}
});
この形式では、値が実行時であるのに対し、バインド時ではありません。
これは複雑な男性向けではありません。
$(document).ready(function() {
src = 'http://domain.com/index.php';
// Load the cities straight from the server, passing the country as an extra param
$("#city_id").autocomplete({
source: function(request, response) {
$.ajax({
url: src,
dataType: "json",
data: {
term : request.term,
country_id : $("#country_id").val()
},
success: function(data) {
response(data);
}
});
},
min_length: 3,
delay: 300
});
});
$("#product").autocomplete
への呼び出しがページの読み込み時に発生していると考えるのは正しいと思います。おそらく、onchange()ハンドラーを選択メニューに割り当てることができます。
$("#zipcode").change(resetAutocomplete);
#product
autocomplete()呼び出しを無効にして、新しい呼び出しを作成します。
function resetAutocomplete() {
$("#product").autocomplete("destroy");
$("#product").autocomplete({
source:"product_auto_complete.php?postcode=" + $('#zipcode').val(),
minLength: 2,
select: function(event, ui){... }
});
}
いくつかのサーバー呼び出しを保存するために、resetAutocomplete()呼び出しを少し賢くしたい場合があります(郵便番号が実際に最後の値と異なるかどうかを確認するなど)。
jQuery("#whatJob").autocomplete(ajaxURL,{
width: 260,
matchContains: true,
selectFirst: false,
minChars: 2,
extraParams: { //to pass extra parameter in ajax file.
"auto_dealer": "yes",
},
});
これは私のために働きます。イベントsearch
をオーバーライドします。
jQuery('#Distribuidor_provincia_nombre').autocomplete({
'minLength':0,
'search':function(event,ui){
var newUrl="/conf/general/provincias?pais="+$("#Distribuidor_pais_id").val();
$(this).autocomplete("option","source",newUrl)
},
'source':[]
});
$('#txtCropname').autocomplete('Handler/CropSearch.ashx', {
extraParams: {
test: 'new'
}
});
$('#product').setOptions({
extraParams: {
extra_parameter_name_to_send: function(){
return $("#source_of_extra_parameter_name").val();
}
}
})
これが誰かを助けることを願っています:
$("#txt_venuename").autocomplete({
source: function(request, response) {
$.getJSON('<?php echo base_url(); ?>admin/venue/venues_autocomplete',
{
user_id: <?php echo $user_param_id; ?>,
term: request.term
},
response);
},
minLength: 3,
select: function (a, b) {
var selected_venue_id = b.item.v_id;
var selected_venue_name = b.item.label;
$("#h_venueid").val(selected_venue_id);
console.log(selected_venue_id);
}
});
デフォルトの「term」は新しいパラメーターリストに置き換えられるため、再度追加する必要があります。