JQuery - 获取调用元素id

时间:2014-12-16 15:17:58

标签: jquery autocomplete

问题

在自动填充的源函数中,我想获取选择器的ID。有没有办法可以通过调用堆栈进行调查并得到它? JQuery是否具有这种抽象级别?

为什么吗

我将在页面上有多个自动填充,每个自动填充将在服务器端以不同方式处理。我必须为源使用另一个函数。否则我会使用URL +数据:很久以前= p

JQuery版本

的jquery-1.9.1

研究

当然,我已经满满的了: JQuery API

How to get element Id from dynamically generated form elements with jquery?

我认为很多这些尝试都不会奏效,但现在我正处于试错之中。

$(this).attr(' id'); - undefined

Caller function name

我虽然尝试获取调用者函数名称,并使用它做某事......但似乎没有输出任何内容。

附加到源函数(这是荒谬的!!!将文本附加到函数中?!真的我绝望了......)

 $("#inPdVehMk").autocomplete({
            source: autoCompletePost + "field="+$(this).attr('id'),
            minLength: 2,
            select: function(event, ui){
                alert(ui.label1);
                alert("value= " + ui.item.value + " id= "+ ui.item.id);
            }
        });

自动完成设置

    $("#inPdVehMk").autocomplete({
        source: autoCompletePost,
        minLength: 2,
        select: function(event, ui){
            alert(ui.label1);
            alert("value= " + ui.item.value + " id= "+ ui.item.id);
        }
    });

来源功能

function autoCompletePost(request, response){
    //alert($(this).attr('id')); //this is where I'm testing to see the ids.
    $.post(AjaxPageAutoComplete, { searchTerm: request.term, field: 'inPdVehMk'}, //I want field to be dynamic depending on the calling selector.
        function(data) {
            var splitData = data.split("%");
            var json = jQuery.parseJSON(splitData[1].toString());

            if(data.search('autoCompleteError') !== -1 || data.length < 1){
                DialogBox('Div_ErrorMessage^Open^autoCompleteError');
            }else{
                response(json);
            }
        }
    );
}

2 个答案:

答案 0 :(得分:4)

我很尴尬地花了多长时间才弄清楚这一点。

在源函数中使用此行来获取自动完成的ID。

$(this.element).prop("id")

由于自动完成是一个jquery小部件,this对象引用小部件实例。要访问该元素,您需要浏览它的element属性。

JSFiddle

公平地说,除非您使用Widget Factory创建窗口小部件,否则不会对此进行详细记录。

答案 1 :(得分:0)

首先,如果你有多个自动完成功能,你的选择器就是一个ID,所以你有多个具有相同ID的控件,这很糟糕。您已确保每个自动填充都具有唯一ID,并通过其他内容选择它们,让我们说一个类。我会尝试这样的事情:

$(".inPdVehMk").autocomplete({
        source: autoCompletePost($(this).attr('id')),
        minLength: 2,
        select: function(event, ui){
            alert(ui.label1);
            alert("value= " + ui.item.value + " id= "+ ui.item.id);
        }
    });

function autoCompletePost(id, request, response){
    //alert($(this).attr('id')); //your in a function so this is not pointing to a control
    $.post(AjaxPageAutoComplete, { searchTerm: request.term, field: id},
        function(data) {
            var splitData = data.split("%");
            var json = jQuery.parseJSON(splitData[1].toString());

            if(data.search('autoCompleteError') !== -1 || data.length < 1){
                DialogBox('Div_ErrorMessage^Open^autoCompleteError');
            }else{
                response(json);
            }
        }
    );
}

我希望这有帮助。