【问题标题】:Uncaught TypeError: Cannot read property '1' of null未捕获的类型错误:无法读取 null 的属性“1”
【发布时间】:2013-07-01 23:00:27
【问题描述】:

我收到一个错误:未捕获的 TypeError:无法读取 null 的属性“1”来源:X.push(check [1]);

有什么问题?

wspolrzedne.value = 像这样在 textArea 中输入的文本:“2.4 5 1 67 15 67”

所以问题可能是因为钛不保护带有 \n 作为新行的字符串?

var coordinates = wspolrzedne.value.split( "\n" );
    var X = [];
    var Y = [];


    for( var i = 0; i < coordinates.length; ++i ) {
        var check = coordinates[ i ].match( /^([0-9]+.[0-9]*) ([0-9]+.[0-9]*)$/ ); 

        if( check == false) {
                var zlewspolrzedne = Ti.UI.createAlertDialog({
                title: "Niew?a?ciwe wspó?rz?dne: " + coordinates[ i ],
                buttonNames: ['Popraw'],
                cancel: 0
            });
            zlewspolrzedne.show();
        }

        X.push( check[ 0 ] );
        Y.push( check[ 1 ] );    

    }

【问题讨论】:

  • 您预计\n 会出现在字符串中的哪个位置?显然你的正则表达式不会匹配完整的字符串。仅供参考,您可以在正则表达式上使用m 修饰符将^$ 重新定义为匹配行的开头和结尾,而不是字符串的开头和结尾。
  • ...如果check 为空,那么我不知道为什么它不会抱怨索引0。少了点什么。
  • 我忘记了在我的示例中输入。我在每行输入 textarea 2 个数字
  • 我确定这段代码可以在普通的 js 中工作jsfiddle.net/fzYe7/10

标签: javascript android titanium


【解决方案1】:

这是因为textArea 不关心linebreaks,它只是一个简单的空格。因此解决方案是按 '' 拆分,然后将它们中的每两个连接起来(或将每一对直接馈送到检查数组并即时检查它们的内容)。

编辑:

好的,所以问题是这一行:

var check = coordinates[ i ].match( /^([0-9]+.[0-9]*) ([0-9]+. [0-9]*)$/ )

它只分配一个值而不是两个。

【讨论】:

  • 你的意思是你可以用“\n”来匹配它们?
  • 好的,问题出在这一行: var check = coordinates[ i ].match( /^([0-9]+.[0-9]*) ([0-9] +. [0-9]*)$/ ) 它只分配一个值而不是两个。
猜你喜欢
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2022-01-19
  • 2021-12-01
  • 2022-07-02
相关资源
最近更新 更多