IE8中的JQuery自动完成问题

时间:2011-02-16 08:07:29

标签: jquery

在我的jsp中,我动态添加了根据其id附加了自动完成事件(jquery)的字段。我在这里面临的问题是输入一个字段,在所有动态添加的字段中触发自动完成。我检查了所有的ID,它们是独一无二的。这种情况只发生在IE而不是FF中。

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

1 个答案:

答案 0 :(得分: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;
    }

}