2012-01-08 100 views
0

我想就与属性“kolonadi”Jquery自动完成后按下第二个键运行?

当我按在文本框的主要使用每个文本框自动完成工作,页面提醒我“的keydown enterance”,但自动完成未运行。如果我再按一个键,它就可以正常工作。

我该如何修改此代码?

这是我的动态输入:

<input name="ctl00$MainContent$qtxt_UNVAN" type="text" id="MainContent_qtxt_UNVAN" class="textEntry2 ui-autocomplete-input" kolonadi="UNVAN" style="width:200px;" autocomplete="off" role="textbox" aria-autocomplete="list" aria-haspopup="true"> 

这是jQuery的自动完成:

$('.textEntry2').keydown(function() { 
    alert("keydown enterance"); 
    var kolonadi_ = $(this).attr("kolonadi"); 

    $(this).autocomplete({ 
     source: function (request, response) { 
      $.ajax({ 
       url: '<%=ResolveUrl("~/AutoCom.asmx/GetValues") %>', 
       data: "{ 'word': '" + request.term + "','KullaniciIndexInGlob':'<%=KullaniciIndexInGlob %>','BaslikId':'<% =BaslikId %>','columnName':'" + kolonadi_ + "'}", 
       dataType: "json", 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       success: function (data) { 
        response($.map(data.d, function (item) { 
         return { 
          label: item.split('-')[0], 
          val: item.split('-')[1] 
         } 
        })) 
       }, 
       error: function (response) { 
        alert(response.responseText); 
       }, 
       failure: function (response) { 
        alert(response.responseText); 
       } 
      }); 
     }, 
     select: function (e, i) { 
      $("#<%=hfCustomerId.ClientID %>").val(i.item.val); 
     }, 
     minLength: 1 
    }); 
}); 
+0

这个插件的文档是[这里](http://www.jqueryui.com/demos/autocomplete)。他们都没有建议在keydown上应用这个widget。我会访问该页面并查看示例。 – 2012-01-08 22:25:38

回答

2

我要让每个autocomplate使用文本框的文本框ATTR“kolonadi”

然后,你需要做的是a jQuery selector该属性相匹配:

$('input[type="text"][kolonadi!=""]').each(function() { 
    // ... 
}); 

...当我按下文本框中的一个键,页面提醒我“keydown enterance”,但autocomp没有运行。如果我再按一个键,它就会运行!

问题是,the jQuery UI .autocomplete method不会立即降低下拉,就像您认为的那样。如果您只调用一次,它会将输入字段永久转换为自动完成字段。

因此,您的代码所做的是检查按键,如果发现它,它会将文本字段变成自动完成。然后当您第二次输入按键时,自动完成处理程序运行您的处理程序运行,并且它会再次转换为自动完成

所以只需在页面加载时直接调用.autocomplete,摆脱​​处理程序,并将其称为完成。您不需要您自己的按键处理程序,因为.autocomplete方法将插入其自己的按键处理程序。

事情是这样的:

var textEntry2 = $('.textEntry2'); 
var kolonadi_ = textEntry2.attr("kolonadi"); 

textEntry2.autocomplete({ 
    source: function(request, response) { 
     $.ajax({ 
      url: '<%=ResolveUrl("~/AutoCom.asmx/GetValues") %>', 
      data: "{ 'word': '" + request.term + "','KullaniciIndexInGlob':'<%=KullaniciIndexInGlob %>','BaslikId':'<% =BaslikId %>','columnName':'" + kolonadi_ + "'}", 
      dataType: "json", 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      success: function(data) { 
       response($.map(data.d, function(item) { 
        return { 
         label: item.split('-')[0], 
         val: item.split('-')[1] 
        } 
       })) 
      }, 
      error: function(response) { 
       alert(response.responseText); 
      }, 
      failure: function(response) { 
       alert(response.responseText); 
      } 
     }); 
    }, 
    select: function(e, i) { 
     $("#<%=hfCustomerId.ClientID %>").val(i.item.val); 
    }, 
    minLength: 1 
}); 
2

编辑:前面的代码不工作,这是必要的,从类的所有输入迭代textEntry2

您必须在$(document).ready函数中调用自动完成功能,而不是在每个keydown中。假设您要在其中使用自动完成所有的输入都来自textEntry2类,你需要这样的:

<script type="text/javascript"> 
$(document).ready(function(){ 
    $('input.textEntry2').each(function() { 
     var kolonadi_ = $(this).attr("kolonadi"); 
     $(this).autocomplete(/* do all stuff here */); 
    }); 
}); 
</script> 
+0

这只回答了一半的问题,或者我已经给出了upvote。另一半这个答案错过了'我想在每个文本框上使用属性“kolonadi”来自动完成工作' – 2012-01-08 22:28:31

+0

@merlyn yes,请参阅编辑。 – 2012-01-08 22:38:55

相关问题