使用sharepointplus时未定义的破解代码处理

时间:2013-08-17 22:19:58

标签: javascript sharepoint jquery-plugins iteration undefined

编辑:请参阅下面的John S.回答这个明显问题背后的真正问题!

我正在使用sharepointplus构建动态表达式。它应该返回一个逻辑值,它就是这样。我已将它移动到变量中,因为我经常使用它(将其作为if的条件引用)。问题是,显然加号是停止处理其余代码。这是两个错误的片段(控制台中没有错误):

for (var i=0; i < data.length; i++){
var category_equal_test = ((data[i].getAttribute("category")) == (data[i+1].getAttribute("category")));

for (var i=0; i < data.length; i++){
var j=i+1;
var category_equal_test = ((data[i].getAttribute("category")) == (data[j].getAttribute("category")));

他们之间没有什么区别,但有那么一刻我觉得我会侥幸逃脱。 这是一段不破坏处理的代码片段(但当然这段代码毫无意义):

for (var i=0; i < data.length; i++){
var category_equal_test = ((data[i].getAttribute("category")) == (data[i].getAttribute("category")));

在破解代码的两种情况下,console.log(category_equal_test)输出我正在寻找的逻辑值集。

我认为这是我的某种能力,所以请赐教!感谢。

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为在循环的最后,data[i + 1]变为未定义,而您无法{em>未定义 getAttribute,所以它会抛出 TypeError

var x; x.getAttribute('foo');
// TypeError: Cannot call method 'getAttribute' of undefined

要解决此问题,请先使循环结束迭代;

for (var i = 0; i < data.length - 1; i++) {
    // ...
}

至于为什么你没有在控制台中收到错误,代码必须包含在try..catch的某个地方。

答案 1 :(得分:0)

这是我最终使用的内容。我希望这对某人有用!

function osDrawPageMenuLeft() {
var spquery = "";
$SP().list("menu","/content").get({fields:"name, link, Level, Order, category"},function(data) {
    spquery += "<ul>";
    var j=0;
        for (var i=0; i < data.length; i++){
            if( i < data.length-1){
                j=i+1;
                var category_equal_test = ((data[i].getAttribute("category")) == (data[j].getAttribute("category")));
            }
            else{
                category_equal_test=false;
            }
            var link_empty_test = (data[i].getAttribute("link") == null);
            var header = data[i].getAttribute("name");
            var header_link = "<a href='" + data[i].getAttribute("link") + "'>" + header + "</a>";
            var row = "<li><a href='"+data[i].getAttribute("link")+"'>"+data[i].getAttribute("name")+"</a></li>";
            if(data[i].getAttribute('Level') == 'Header'){
                if (((category_equal_test)&&(!link_empty_test))){
                    spquery += "<li>" + header_link + "<ul>";
                }
                else if(((!category_equal_test)&&(!link_empty_test))){
                    spquery += "<li>" + header_link + "</li>";
                }
                else if(((category_equal_test)&&(link_empty_test))){
                    spquery += "<li>" + header + "<ul>";
                }
                else if(((!category_equal_test)&&(link_empty_test))){
                    spquery += "<li>" + header + "</li>";
                }
            }
            else{
                if((!category_equal_test)){
                spquery += row + "</ul></li>";
                }
                else{
                spquery += row;
                }
            }
        };
    spquery += "</ul>";
    $('#newleftNav').append(spquery);
});
}