【问题标题】:JQuery - Get calling element idJQuery - 获取调用元素ID
【发布时间】:2015-02-14 22:53:42
【问题描述】:

问题

在自动完成的源函数中,我想获取选择器的 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'); - 未定义

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);
            }
        }
    );
}

【问题讨论】:

  • 你需要使用委托。找到它被加载到的容器,然后使用.find() 来获取该项目。或者,如果涉及一些click 操作,您可以使用e.target.id
  • 所以你需要知道autoCompletePost函数中的id,对吧?
  • @slicedtoad 是的,所以在我发布的代码中我正在寻找这个'inPdVehMk',但在AutoCompletePost() 函数中。所以我可以传递数据字段:'inPdVehMk'$.post()。我不想为要设置的每个自动完成功能静态键入字段名称,所以我想让它获得调用选择器。
  • @PlantTheIdea 我认为这会起作用......我以前从未使用过它,所以我现在正在玩这个。我很高兴你向我展示了这个,因为我本可以在 4 个月前使用它。我只是想让你知道,在某个遥远的办公室里的一个小隔间里,有一个成年人在哭泣,希望他在 4 个月前就知道这一点。
  • @PlantTheIdea 源选项是回调,而不是事件。我不知道你怎么能委派它...

标签: jquery autocomplete


【解决方案1】:

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

在源函数中使用这一行来获取自动完成的 id。

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

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

JSFiddle

公平地说,除非您使用 Widget Factory 创建小部件,否则这并没有很好地记录。

【讨论】:

    【解决方案2】:

    首先,如果您有多个自动完成功能,您的选择器是一个 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);
                }
            }
        );
    }
    

    希望对你有所帮助。

    【讨论】:

    • 你在第二行调用函数,它会执行函数而不是把函数设置为源。
    • 在此行收到此错误Uncaught TypeError: Cannot read property 'term' of undefined$.post(AjaxPageAutoComplete, { searchTerm: request.term, field: id},
    猜你喜欢
    • 1970-01-01
    • 2022-12-05
    • 2012-04-20
    • 2021-08-01
    • 1970-01-01
    • 2012-04-12
    • 2014-03-03
    相关资源
    最近更新 更多