2011-02-16 107 views
0

在我的jsp中,我已经动态地添加了基于其id的附加自动完成事件(jQuery)的字段。我在这里遇到的问题是在所有动态添加的字段中输入一个触发自动完成的字段。我已经检查过所有的ID并且它们是独一无二的。这只发生在IE中,而不是FF中。IE8中的JQuery自动完成问题

任何人都可以帮助我解决这个问题。

回答

0
function addSPNAC() 
{ 
    var counter = $('#spnRowCounter').val(); 
    if($('#spnId' + counter).elementExists()) 
    { 
     $('#spnId' + counter).autocomplete("security-ac.action?onlySpn=true", { 
      formatItem : function(row, i, max) { 
      return "<table class='ac-table' border='0' cellpadding='1' cellspacing='0' style='width:100%;table-layout:fixed;'><colgroup><col width='20%' /><col width='50%' /><col width='30%' /></colgroup>" + 
      "<tr><td>" + row[1] + "</td><td>" + row[0] + "</td><td class='aln-rt'>" + row[3] + "</td></tr></table>"; 
      }, 
      formatResult : function (row) { 
       return row[1]; 
      }, 
      scroll : true, 
      multiple : false, 
      minChars : 3, 
      width : 383, 
      highlight: function(value, term) { 
       if ($(value).find("td").size() === 0) { 
        return value; 
       } 
       return $.Autocompleter.defaults.highlight(value, term); 
      }, 
      resultsClass : "ac_results search_ac" 
     }); 
     alert('added SPN AC for ' + '#spnId' + counter); 
    } 
} 

当我添加一个新字段时,将会调用上面的方法。以下是动态生成一行的代码。

function insertRow(eleToClone) 
{ 
    var counter = $('#' + eleToClone + 'Counter').val(); 
    counter++; 
    $('#' + eleToClone + 'Counter').val(counter); 
    var newFields = document.getElementById(eleToClone).cloneNode(true); 
    newFields.id = $('#' + eleToClone).id + '' + counter; 
    var newField = newFields.childNodes; 
    for (var i = 0; i < newField.length; i++) { 
     updateIds(newField[i], counter); 
    } 
    var insertHere = document.getElementById(eleToClone); 
    insertHere.parentNode.insertBefore(newFields,insertHere); 
    newFields.style.display = 'block'; 
    return; 
} 

function updateId(element, counter) 
{ 
    if(element.childNodes && element.childNodes.length > 0) 
    { 
     for (var j = 0; j < element.childNodes.length; j++) { 
      updateId(element.childNodes[j], counter) 
     } 
    }  
    var theId = element.id; 
    if(theId) { 
     element.id = theId + '' + counter; 
     element.name = theId + '' + counter; 
    } 

}