2017-12-24 3 views
-1

DataTablesでテーブルを読み込んでいます。各行でクリックするボタンを作成し、その値がオープナーウィンドウの入力に自動的に挿入されます。私が使用する関数は次のとおりです。機能データシート内のボタンをクリック

$("button").click(function() { 
     var id = $(this).val(); 
     window.opener.document.getElementById('cliente-nombre').value = id; 
     window.parent.close(); 
}); 

この関数は、データテーブルにロードされたボタンでは機能しません。私は、ページが(ページが完全にロードされているときではない)とロードするボタンを作成する場合、問題なく動作します。ページが完全にロードされるときにそれらが作成されるため

は私が

答えて

0

ページロード後にロードされた要素を処理する場合は、on()を介してイベントハンドラを親要素に委任し、クリックに応答するようにします。それらは後で文書に追加され 子孫要素からイベントを処理することができるという利点を有する

委任イベント。 委任イベントハンドラがアタッチされているときに存在することが保証されている要素を選択すると、委任されたイベントを に頻繁にアタッチして削除する必要がなくなります。この 要素は、 ハンドラがドキュメント内のすべてのバブリングイベントを監視したい場合は、 モデルビューコントローラの設計、またはドキュメントのビューのコンテナ要素です。文書要素の は、他のHTMLをロードする前に文書の先頭にありますので、文書を準備するのを待つことなく、 を待たずにそこにイベントを添付することは安全です。

ここで私はdocumentオブジェクトを使用します。

$(document).on('click', 'button', function() { 
    var id = $(this).val(); 
    window.opener.document.getElementById('cliente-nombre').value = id; 
    window.parent.close(); 
}); 
0

$(document).readyでそれをラップ試してみてください、このいけない作業をsupose。これは、コードを実行する前にページが読み込まれるのを待ちます。

$(document).ready(function() { 
    $("button").click(function() { 
      var id = $(this).val(); 
      window.opener.document.getElementById('cliente-nombre').value = id; 
      window.parent.close(); 
    }); 
}); 

クリックハンドラをアタッチする前に、ボタンにDOMが表示されるようにします。

関連する問題