2012-12-19 61 views
0

其实,我有超过8输入瓦特/ 8个不同的id在HTML &我想通过jquery对象onlblur事件功能,所以我不需要创建8重复功能&只能使1脚本功能。 我一直在努力寻找堆栈溢出几个小时,但无法找到我的问题的答案,或许我只是新的jQuery。希望你能帮助我&在此先感谢...如何将多个jQuery对象传递给js函数?

function fill(t,xx,zz) { 
    $(xx).val(t); 
    setTimeout("$(zz).hide();", 200); 
} 

<input type="text" id="inputString" size="50" value="" onkeyup="lookup(this.value);" onblur="fill(this.value,'#inputString','#suggestions');" /> 
<div class="suggestionsBox" id="suggestions" style="display: none;">  

为了让您更好地理解代码的,这一点,原来一个真正起作用&只有1输入HTML标记好。我打算在8输入html标签上只使用一个函数。

<script type="text/javascript" src="jquery-1.2.1.pack.js"></script> 

function lookup(xString) { 
    if(xString.length == 0) { 
     // Hide the suggestion box. 
     $('#suggestions').hide(); 
    } else { 
     $.post("db_rpc.php", {queryString: ""+xString+""}, function(data){ 
      if(data.length >0) { 
       $('#suggestions').show(); 
       $('#autoSuggestionsList').html(data); 
      } 
     }); 
    } 
} // lookup 

function fill(t) { 
    $('#inputString').val(t); 
    setTimeout("$('#suggestions').hide();", 200); 
} 
+2

我想你正在寻找参数数组。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments – Tetaxa

+0

$(xx).val(t); - 这部分什么都不做。您想做什么?像html5占位符选项? –

+0

该功能中的部分选中列表后使用jquery-1.2.1.pack.js&隐藏它的下拉列表提示框。如果我仅使用1个输入html标记,此功能只是很好。 –

回答

0

我做到了通过参数传递给这两个函数工作中使用1台的功能,用于8输入标签。我放置了一个switch语句来确定输入标签id,如函数fill所示。我还在函数查找中添加了另一个POST变量。下面是我修改后的代码:

function lookup(inputString,nn) { 
    if(inputString.length == 0) { 
     // Hide the suggestion box. 
     $('#suggestions').hide(); 
    } else 
    { 
     $.post("db_rpc.php", {queryString: ""+inputString+"",nns: ""+nn+""}, function(data) 
     { //nns added a new post variable nns for php mysqli 
      if(data.length >0) { 
       $('#suggestions').show(); 
       $('#autoSuggestionsList').html(data); 
      } 
     }); 
    } 
}; // lookup 

function fill(xx,n) { 
switch(n) { 
    case 1: 
    $('#namedetails').val(xx); // input id 
    break; 
    case 2: 
    $('#catdetails').val(xx); 
    break; 
} 
setTimeout("$('#suggestions').hide();", 200); 
};  


<td class="absy"><input name="namedetails" type="text" id="namedetails" size="50" value="" onkeyup="lookup(this.value,1);" onblur="fill(this.value,1);"/> 
     <div class="suggestionsBox" id="suggestions" style="display: none;"> 
      <img src="upArrow.png" style="position: relative; top: -12px; left: 30px;" alt="upArrow" /> 
      <div class="suggestionList" id="autoSuggestionsList"> 
       &nbsp; 
      </div> 
     </div> 

我只是想感谢大家谁作出回答我的问题......不过我学会了从您建议的事情的努力。也许我的问题对你们来说有点模糊,可能是因为我仍然对jquery &感到陌生,只是在长时间的停留之后才开始编码。再次感谢...

2

让所有的单元共享相同类。

<div id="idOne" class="toBlur" /> 
<div id="idTwo" class="toBlur" /> 
<div id="idThree" class="toBlur" /> 

告诉jQuery的,你希望在blur事件被激发到相同的功能与类适用于每个项目。另外,如果你要使用jQuery(它在你的问题标签中),你不应该像在HTML中那样指定你的回调。

+0

如果我使用它,它也会改变其他值8输入$('。stringclass')。val(t);在下拉列表中的建议框中。不管怎样,谢谢=) –

0

你做到这一点与事件处理函数和类:

<input type="text" class="inputString" /> 
<div class="suggestionsBox" id="suggestions" style="display: none;">  

JS

$('.inputString').on({ 
    keyup: function() { 
     lookup(this.value); 
    }, 
    blur: function() { 
     var self = this; 
     setTimeout(function() { 
      $(self).next('.suggestionsBox').hide() 
     },200); 
    } 
}); 
+0

为什么不使用jQuery(self).next('。suggestionsBox')。delay(200).fadeOut(0);而不是setTimeout? –