2009-11-17 72 views
3

我使用jQuery自动完成插件,并连接了一个输入字段以从后端数据库检索值,随后可以选择文本。
然后我有一个第二个输入字段,我用类似的方式连接了,但是我想在自动完成ajax调用中将第一个输入字段的值作为querystring参数传递,以便可以过滤自动完成结果。
我已经尝试使用第一个输入字段的.val()方法,但这似乎总是返回一个空字符串,除非我允许表单回发。我也尝试过使用getElementById('xxx')。value,但是这返回一个空值。
有什么办法可以检索在第一个字段中选择的动态值,所以我可以将它传递给我的jQuery Ajax调用服务器?下面一些为了简洁,删除
代码:检索一个jQuery自动完成字段

<% using (Html.BeginForm()) {%> 
    <script language="javascript"> 
     $(document).ready(function(){ 
      $("#Make").autocomplete('/MyController/AutoCompleteMake', { 
       dataType: 'json', 
       parse: function(data) { 
        var rows = new Array(); 
        for (var i = 0; i < data.length; i++) { 
         rows[i] = { data: data[i], value: data[i], result: data[i] }; 
        } 
        return rows; 
       }, 
       formatItem: function(row) { 
        return row; 
       }, 
       delay: 40 
      }); 

      $("#Range").autocomplete('/MyController/AutoCompleteRange?Make=' + $('input[name=Make]').val(), { 
       same as above ....... 
      }); 
     }); 
    </script> 
    <fieldset> 
     <legend>Fields</legend> 
     <p> 
      <label for="Make">Make:</label> 
      <%= Html.TextBox("Make") %> 
      <%= Html.ValidationMessage("Make", "*") %> 
     </p> 
     <p> 
      <label for="Range">Range:</label> 
      <%= Html.TextBox("Range") %> 
      <%= Html.ValidationMessage("Range", "*") %> 
     </p> 
<% } %> 

这是$(“输入[名称=制作]”),其常是返回即使一个已经选定的空值VAL()的一部分。

我刚刚开始使用jQuery和MVC,所以任何帮助将不胜感激。

回答

5

您需要使用extraParams功能:

$("#Make").autocomplete(url, { 
    extraParams: { 
     yourValue: function() { return $("input[name=Make]").val(); } 
    } 
}); 

这将被穿过的HttpContext目标通过。

这可以拉出如下:

string valueToUse = context.Request.QueryString["yourValue"]; 

从jQuery自动完成Documentation

往往是自动完成的领域取决于 另一个字段的值。在这种 情况下,extraParams选项 提供必要的动态 参数

为你建立一个静态的字符串您当前的代码不起作用。你需要使用一个函数,它会动态地返回你感兴趣的输入字段的值。

+0

+1,你是对的,我完全和灾难性地被误解了。 – karim79 2009-11-17 13:59:07

+0

Karim :)不用担心我们会尽最大努力! – GenericTypeTea 2009-11-17 14:00:39

+0

现货。这让我在墙上停留了几个小时。干杯。 – 2009-11-17 14:08:22