2016-03-29 14 views
0

私のオプションのページでは、クロムストレージのエントリに関連する入力番号とボタンを含む行が生成されます。Chrome拡張オプションのページでClickイベントが機能しない

問題は、ボタン用に作成しているイベントリスナーがまったく機能しないことです。

options.html

<html> 
<head> 
    <title>Select the movie's Id</title> 
    <style> 
     body: { padding: 10px; } 

     .style-1 input[type="number"] { 
      padding: 10px; 
      border: solid 1px #dcdcdc; 
      transition: box-shadow 0.3s, border 0.3s; 
      width: 5em; 
     } 
     .style-1 input[type="number"]:focus, 
     .style-1 input[type="number"].focus { 
      border: solid 1px #707070; 
      box-shadow: 0 0 5px 1px #969696; 
     } 
    </style> 
</head> 

<body> 
    <legend style="border-bottom: solid 1px">Insert</legend> 
    <input type="number" name="id" id="id" value=""> 
    <button id="save">Insert</button> 
    <br> 
    <br> 
    <legend style="border-bottom: solid 1px">Manage</legend> 
    <div id="ghost" style="display: none"> 
     <input type="number" name="VAL"> 
     <button name="DEL" id="" >Delete</button> 
     <br><br> 
    </div> 

    <script src="options.js"></script> 
</body> 

options.js私は何も起こりません削除ボタンのいずれかをクリックします。これにより

document.getElementById('save').addEventListener('click', save_options); 

chrome.storage.sync.get('movieId', function(result){ 
    for (var i=0; i<result.movieId.length; i++){ 
     createRow(result.movieId[i]); 
    } 
}); 

function save_options() { 
    var id = document.getElementById('id').value; 
    chrome.storage.sync.get('movieId', function(result){ 
     var ids = result.movieId; 
     ids.push(id); 
     chrome.storage.sync.set({ 
      'movieId': ids 
     }, function() { 
     }); 
     location.reload(); 
    });  
} 

function createRow(pos){ 
    var newRows= document.getElementById('ghost').cloneNode(true); 
    newRows.id= ''; 
    newRows.style.display= 'block'; 
    var newRow= newRows.childNodes; 
    for (var i= 0; i< newRow.length; i++){ 
     var newName= newRow[i].name; 
     if (newName){ 
      newRow[i].name = newName+pos; 
      newRow[i].id = pos; 
      newRow[i].value = pos; 
     } 
    } 
    var insertHere= document.getElementById('ghost'); 
    insertHere.parentNode.insertBefore(newRows,insertHere); 

    document.getElementById(pos).addEventListener('click', delet()); 
} 

function loop(arrayIds){ 
    console.log('loop'); 
    for (var i=0; i<arrayIds.length; i++){ 
     createRow(i); 
    } 
} 

function delet(){ 
    console.log("this.id"); 
    //chrome.storage.sync.remove(id); 
} 

、。

私はdocument.getElementById(pos).addEventListener('click', delet());と考えることができるすべての組み合わせを試しましたが、どちらも機能しません。

答えて

0
document.getElementById(pos).addEventListener('click', delet()); 

は、あなたは、このようにその関数の結果はundefinedあるイベントリスナーとして追加されdeletを呼び出しているスニペットで

document.getElementById(pos).addEventListener('click', delet); 

ことになっています。 deletをイベントハンドラとしてバインドする場合は、呼び出すことなくaddEventListenerに渡します。

EDIT

私はあなたのコードを見てきたように、あなたはinputbuttonの両方に同じIDを与えている、あなたはそれがinput代わりのbuttonそうに返すdocument.getElementByIdを呼び出すときに、イベントはinput代わりのbuttonにバインドされます。その答えは、この

function createRow(pos) { 

    var newRow = document.getElementById('ghost').cloneNode(true); 
    newRow.id= ''; 
    newRow.style.display= 'block'; 

    var value = newRow.querySelector("[name=VAL]"); 
    var button = newRow.querySelector("[name=DEL]"); 

    value.id = "VAL" + pos; 
    value.value = pos; 

    button.id = "DEL" + pos; 

    var insertHere= document.getElementById('ghost'); 
    insertHere.parentNode.insertBefore(newRow, insertHere); 

    button.addEventListener('click', delet); 
} 
+0

のおかげで、あなたのcreateRowを置き換える修正するには

、それはまだ動作していません。 私も 'document.getElementById(pos).addEventListener( 'click'、function(){delet()});で試してみました。 – cargide

+0

@cargideログに記録されたエラーをコンソールで確認できますか? –

+0

コンソールに何も表示されず、削除ボタンをクリックすると、 'console.log(" this.id ");は表示されません。 – cargide

関連する問題