2017-01-06 13 views
0

ブートストラップモーダルボタンに保存をクリックすると、次に使用可能な番号が検索されます。保存をクリックして新しい番号を作成できないときにエラーが発生する

どのような場合でもnullを返すとエラーがスローされます。

例外TypeError:マッチが作成されたときにリンクがテキストエリアに見てどのように

Question When click on save in bootstrap modal if no numbers found in textarea then will create a number. Currently if no findAvailableNumber function returns null unable to create a number

Codepen Example

$('#myLink').on('shown.bs.modal', function() { 
    var text = getSelectedText(); 
    $('#title').val(text.trim()); 
    $('#url').val('http://'); 
});  

function getSelectedText() { 
    var textarea = document.getElementById("message"); 
    var len = textarea.value.length; 
    var start = textarea.selectionStart; 
    var end = textarea.selectionEnd; 
    var sel = textarea.value.substring(start, end); 
    return sel; 
} 

function findAvailableNumber(textarea){ 
     //Find lines with links 
    var matches = textarea.value.match(/(^|\n)\s*\[\d+\]:/g); 

    //Find corresponding numbers 
    var usedNumbers = matches.map(function(match){ 
     return parseInt(match.match(/\d+/)[0]); } 
    ); 

    //Find first unused number 
    var number = 1; 

    while(true){ 
     if(usedNumbers.indexOf(number) === -1){ 
      //Found unused number 
      return number; 
     } 

     number++; 
    } 

    return number; 
} 

$('#save-link').on('click', function(e) { 
    var textarea = document.getElementById("message"); 
    var len = textarea.value.length; 
    var start = textarea.selectionStart; 
    var end = textarea.selectionEnd; 
    var sel = textarea.value.substring(start, end); 

    var counter = findAvailableNumber(textarea); 

    var replace = '[' + $('input#title').val() + ']' + '[' + counter + ']'; 

    var id = '\n [' + counter + ']: ' + $('input#url').val(); 

    if ($('#title').val().length > 0) { 
     textarea.value = textarea.value.substring(0,start) + replace + 
     textarea.value.substring(end,len) + id; 
    } else { 

     return false; 
    } 
}); 

nullです。

[exmple-1][1] and [example-2][2] 

[1]: http://www.example.com 
[2]: http://www.example.com 
+0

、あなたの入力として '[1,2,3,4] .MAP()=> [2,3,4,8]' –

+0

問題のように所望の出力を指定することができますしてください正規表現はあなたが欲しいものを教えてくれますか? –

答えて

1

あなたは<textarea>が実際にfindAvailableNumber()内の値を持っているかどうかを確認する必要があります。そうでない場合は、1を返してください。

function findAvailableNumber(textarea){ 
    var number = 1; 
    if(textarea.value){ 

     //Find lines with links 
     var matches = textarea.value.match(/(^|\n)\s*\[\d+\]:/g); 

     //Find corresponding numbers 
     var usedNumbers = matches.map(function(match){ 
      return parseInt(match.match(/\d+/)[0]); } 
    ); 

     //Find first unused number 
     var number = 1; 

     while(true){ 
      if(usedNumbers.indexOf(number) === -1){ 
       //Found unused number 
       return number; 
      } 

      number++; 
     } 
    } 

    return number; 
} 

Here's an updated pen.

+0

ちょっとしたバグ今、私が自分のハイパーリンクで使用したいテキストエリアでテキストを選択し、モーダルでsaveをクリックすると何らかの理由でnullにマッチします。 'textarea.value'が数字でないことをチェックします。 [1] – user4419336

関連する問題