2010-09-12 15 views
45

मैं अपने रूपों में से एक में JQuery Autocomplete का उपयोग कर रहा हूं।मैं Jquery Autocomplete फ़ील्ड में अतिरिक्त पैरामीटर कैसे पास करूं?

मूल रूप से मेरे डेटाबेस से उत्पादों का चयन करता है। यह बहुत अच्छा काम करता है, लेकिन मैं आगे विकसित करना चाहता हूं ताकि केवल एक निश्चित ज़िपकोड से भेजे गए उत्पादों को वापस कर दिया जाए। मुझे बैकएंड स्क्रिप्ट मिल गई है। मुझे बस इस स्क्रिप्ट में ज़िपकोड पास करने का सबसे अच्छा तरीका काम करने की ज़रूरत है।

इस प्रकार मेरा फॉर्म दिखता है।

$("#product").autocomplete 
({ 
    source:"product_auto_complete.php?postcode=" + $('#zipcode').val() +"&", 
    minLength: 2, 
    select: function(event, ui){ 

          //action 

           } 
}); 

इस कोड को एक हद तक काम करता है:

<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 कोड है। लेकिन केवल पहले zipcode मान देता है भले ही कौन सा मान वास्तव में चुना गया हो। मुझे लगता है कि क्या हो रहा है कि चुनिंदा मेनू बदलते समय स्रोत यूआरएल पेज लोड पर आधारित है। क्या इसके चारों ओर एक रास्ता है? या परिणाम के बाद मैं एक बेहतर तरीका है जिसके बाद मैं हूं?

उत्तर

65

आप इस तरह, source कॉल के लिए एक अलग दृष्टिकोण का उपयोग करने की जरूरत है:

$("#product").autocomplete({ 
    source: function(request, response) { 
    $.getJSON("product_auto_complete.php", { postcode: $('#zipcode').val() }, 
       response); 
    }, 
    minLength: 2, 
    select: function(event, ui){ 
    //action 
    } 
}); 

इस प्रारूप आप पारित जो कुछ भी मूल्य है जब यह चलाए जाने के दौरान, के रूप में करने का विरोध किया, जब यह बाध्य है की सुविधा देता है।

+0

हम्म। मैं इस विधि का उपयोग कर इसे काम नहीं कर सकता। हालांकि यह बहुत अच्छा होगा अगर मैं ऐसा कर सकता हूं क्योंकि यह समस्या के करीब आने का एक और शानदार तरीका है। क्या JSON डेटा को अलग-अलग संरचित करने की आवश्यकता है? क्या मैं अभी भी अपनी स्रोत फ़ाइल में $ _GET ['postcode'] और $ _GET ['term'] का उपयोग करता हूं? – matt

+12

@matt - आप उपर्युक्त कोड के साथ '$ _GET ['postcode']' का उपयोग कर रहे हैं ... यदि आप वहां पर शब्द चाहते हैं, तो डेटा तर्क के लिए इसका उपयोग करके इसे जोड़ें: '{term: request। शब्द, डाक कोड: $ ('# ज़िप कोड')।वैल()} ' –

+1

@ निक अभी भी इसे काम करने में परेशानी है। मैंने परिवर्तन किया है, लेकिन स्वतः पूर्ण करने में विफल रहता है। Jquery मेरे लिए बहुत नया है, इसलिए मुझे यकीन नहीं है कि डीबग कैसे करें, लेकिन ऐसा लगता है कि मेरे जावास्क्रिप्ट फ़ाइल से सभी कोड काम करने से रोकते हैं। मुझे यकीन नहीं है कि जगह से क्या हो सकता है, लेकिन "request.term" मेरे लिए नया है। स्पष्ट करने के लिए, यह "शब्द" है जो स्वत: पूर्ण बनाता है जैसे आप लिखते हैं, है ना? – matt

5

मेरा मानना ​​है कि आप $("#product").autocomplete पर अपने कॉल को सोचने में सही हैं पृष्ठ लोड पर गोलीबारी कर रहे हैं। शायद आप चयन मेनू के लिए एक onchange() हैंडलर असाइन कर सकते हैं:

$("#zipcode").change(resetAutocomplete); 

और यह #product स्वत: पूर्ण() कॉल को अमान्य और एक नया बना है। कुछ सर्वर कॉल को बचाने के लिए -

function resetAutocomplete() { 
    $("#product").autocomplete("destroy"); 
    $("#product").autocomplete({ 
     source:"product_auto_complete.php?postcode=" + $('#zipcode').val(), 
     minLength: 2, 
     select: function(event, ui){... } 
    }); 
} 

आप अपने resetAutocomplete चाहते हो सकता है() एक छोटे से होशियार होने के लिए कहते हैं - जाँच की तरह अगर जिप कोड वास्तव में अंतिम मान से अलग है।

+0

स्वत: पूर्ण विजेट को नष्ट और पुनः यह * काफी * बेकार है, तो आप का उपयोग करना चाहिए 'स्रोत 'तर्क के रूप में इसका उद्देश्य था ... –

+0

@NickCraver स्रोत पैरामीटर मेरे लिए काम नहीं करता है :( – Footniko

+0

@Footniko चालू सीई लोड हो गया है, मुझे मूल्यों को बदलने के लिए इसे फिर से बनाने की जरूरत है, मैं एक अतिरिक्त पैराम का उपयोग कर रहा हूं और यह ऐसा करने के बिना अपने मूल्य को अपडेट नहीं करता है! – Cirelli94

3

यह मेरे लिए यह काम है।

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':[] 
}); 
+0

खोज के समय स्रोत यूआरएल पर जीईटी वर्र्स सेट करने के लिए ग्रेट, सरल समाधान, पेज लोड पर नहीं। स्रोत फ़ंक्शन – ransomweaver

3
jQuery("#whatJob").autocomplete(ajaxURL,{ 
    width: 260, 
    matchContains: true, 
    selectFirst: false, 
    minChars: 2, 
    extraParams: { //to pass extra parameter in ajax file. 
     "auto_dealer": "yes", 
    }, 
}); 
+1

में AJAX कॉल करने से पढ़ने के लिए इतना आसान है इसे अब पैराम कहा जाता है। पैराम्स: {"auto_dealer": "yes"}, – rothschild86

22

यह जटिल पुरुषों के लिए नहीं है: घटना search ओवरराइड

$(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 
}); 
}); 
0
$('#txtCropname').autocomplete('Handler/CropSearch.ashx', { 
    extraParams: { 
     test: 'new' 
    } 
}); 
0
$('#product').setOptions({ 
    extraParams: { 
     extra_parameter_name_to_send: function(){ 
      return $("#source_of_extra_parameter_name").val(); 
     } 
    } 
}) 
संबंधित मुद्दे