2

各行のリンクをクリックするといくつかの関数がトリガーされるテーブルがあります。

コードの関連部分は次のとおりです。

$('.my_table').inplacerowedit({
     url: myurl,
    });

inplacerowedit.jsファイルには、次のものがあります。

(function($) {
    $.fn.inplacerowedit = function(options) {
        var ops = $.extend({}, $.fn.inplacerowedit.defaults, options);
        $(this).find(ops.editbuttonselector).on('click', function(e) {
    ... }

ops.editbuttonselector = 'a.edit'

私のテーブルには各行に編集リンクがあり、通常は正常に機能しています。私の問題は、新しく作成された行にあります。

行を作成してテーブルに追加する方法は次のとおりです。

    new_row = null

    getNewRow = function() {
        if (new_row == null){
            new_row = $("<tr>");
            columns = {'name':'','type':'','value':'','edit':'','delete':''}
            for (var column in columns)
                new_row.append( $("<td>").addClass(column).text(columns[column]));
            links = ['edit','delete']
            for (var i=0;i<links.length;i++){
                link = links[i]
                a = $("<a href='"+link+"' class='"+link+"'>").text(link);
                new_row.find("."+link).append(a)
            }
        }
        return new_row
    };

    $("#addRowAndEdit").click(function(e){
        e.preventDefault();
           var row = getNewRow();
           $(".my_table").append(row);
           new_record = $('.my_table tbody>tr:last');
           new_record.find('a.edit').click(); //this is the line that is not working.
           ....
    }

アップデート:

私がそうするnew_record.find('a.edit').on('click', alert('ok'));と、アラート機能は機能しますが、もう一方は呼び出されません。

何か案は?ありがとう

4

3 に答える 3

3

イベント委任を使用して、新しく追加された行が、個々のa要素にアタッチするのではなく、テーブルにアタッチされたハンドラーによって処理されるようにします。そのために、次の行を置き換えますinplacerowedit.js

$(this).find(ops.editbuttonselector).on('click', function(e) {

これのために:

$(this).on('click', ops.editbuttonselector, function(e) {

編集済み

于 2012-11-23T17:58:14.307 に答える
0

1.6以降の最新のjqueryバージョンを使用している場合は、次のことを試してください。

new_record.find('a.edit').live('click',function(){
    // All your desired stuff here
});

これがあなたのために働くかどうか試してみてください。

Just because you are dynamically creating the rows、この種の状況では、.live()イベントハンドラーが役立ちます。

詳細については、http: //api.jquery.com/live/をご覧ください。

于 2012-11-23T19:01:43.090 に答える
0

2つの変更を加える必要がありました。1つはnelsonによって提案されたものであり(何らかの理由で、彼の提案を初めて試したときに、既存のリンクが壊れていました)、もう1つは次のように変更しました:new_record.find('a.edit')[0 ]。クリック()

https://stackoverflow.com/a/12110482/210481で答えを見つけました

于 2012-11-23T20:38:30.400 に答える