JavaScript函数有时只能使用相同的输入

JavaScript函数有时只能使用相同的输入,javascript,jquery,html,Javascript,Jquery,Html,我为一个项目编写了以下代码(使用JQuery)。其思想是拥有一个可以附加到“item”div中的元素的函数,它将返回该div的id。在这种情况下,div id将是item-[some item primary key value]。此函数可能工作9/10次,但每隔一段时间它就会转到else-else情况并返回false。我已经通过控制台验证了选择器的输入在成功和失败案例中都是完全相同的JQuery$()项 我对JavaScript比较陌生,所以可能有一些明显的地方我没有,但这是一些非常不寻常的行

我为一个项目编写了以下代码(使用JQuery)。其思想是拥有一个可以附加到“item”div中的元素的函数,它将返回该div的id。在这种情况下,div id将是item-[some item primary key value]。此函数可能工作9/10次,但每隔一段时间它就会转到else-else情况并返回false。我已经通过控制台验证了选择器的输入在成功和失败案例中都是完全相同的JQuery$()项

我对JavaScript比较陌生,所以可能有一些明显的地方我没有,但这是一些非常不寻常的行为

var recursionCounter = 0;
function getElementID(selector, recursionDepth, searchString){
    console.log(selector);
    var elementID = selector.attr("id");
    if(elementID === undefined){
        elementID = "";
    }
    if(elementID.indexOf(searchString) !== -1){
        elementID = elementID.split("-")[1];
        return elementID;
    } else {
        if(recursionCounter < recursionDepth){
            recursionCounter++;
            return getElementID(selector.parent(), recursionDepth, searchString);
        } else {
            recursionCounter = 0;
            alert("The element clicked does not have an associated key.");
            return false;
        }
    }
}

提前感谢您的帮助

如果您想要获取单击元素的封装元素,并且您知道它应该有一个以“item-”开头的id,那么您应该能够按照

$(this).closest('[id^="item-"]').attr('id')

也就是说,找到id以“item-”开头的最接近的父元素,并告诉我它的id。

html可能也会有帮助。你可以用调用
.closest()
来替换其中的大部分内容。为什么这样的问题会被否决?这里缺少什么、不清楚什么、不完整什么等等?可能是因为您在找到元素ID并返回它之后没有重置
递归计数器。在
返回elementID之前尝试
recursionCounter=0
波蒂说的话。如果编辑铅笔项目直接由所需的div包围,则可以使用$(this.parent().attr('id');如果编辑铅笔项目被间接包围,则可以使用$(this.nexist('div').attr('id')。甚至可能是$(this).closest('[id^=“item-“]').attr('id'))
$(this).closest('[id^="item-"]').attr('id')