2010-12-12 7 views
3

私は次のマークアップ持っている:私は次のスクリプトのjQuery UIを持ってjQuery UIダイアログにデータを渡す標準的なアプローチは何ですか?

<div data-id="1" data-name="Product 1">Product 1 <a href="#" id="delete_1">Delete</a></div><br /> 
<div data-id="2" data-name="Product 2">Product 2 <a href="#" id="delete_2">Delete</a></div><br /> 
<div data-id="3" data-name="Product 3">Product 3 <a href="#" id="delete_3">Delete</a></div><br /> 
<div data-id="4" data-name="Product 4">Product 4 <a href="#" id="delete_4">Delete</a></div><br /> 

<div id="delete-product" title="Delete product?"> 
    <p> 
    <span 
     class="ui-icon ui-icon-alert" 
     style="float:left; margin:0 7px 20px 0;"> 
    </span> 
    This product will be permanently deleted and cannot be recovered. Are you sure? 
    </p> 
</div> 

を:私はダイアログボックスに表示することができますので、

$(function() { 
    $("#delete-product").dialog({ 
    autoOpen: false, 
    resizable: false, 
    height: 140, 
    modal: true, 
    buttons: { 
     "Delete": function() { 
     $(this).dialog("close"); 
     }, 
     "Cancel": function() { 
     $(this).dialog("close"); 
     } 
    } 
    }); 

    $("a[id^='delete']").each(function() { 
    $(this).click(function() { 
     $("#delete-product").dialog('open'); 
     return false; 
    }); 

    }); 
}); 

にはどうすればDelete関数に値を渡すのですか?私はグローバル変数を設定することを考えましたが、それはちょっとうんざりです。

クリックイベントを発生させた<a>タグへの参照を取得しても構いません。そこから私は残りの部分を解決することができます。

+0

@matt - どうすれば '" Delete "の中に入ります:function(){$(this).dialog(" close "); } '? – Kev

+0

閉鎖はどうですか? – jwueller

+0

@elusive - あなたは精巧にできますか? – Kev

答えて

3

jQueryで.data()APIを使用できます。

$(function() { 
    $("#delete-product").dialog({ 
    autoOpen: false, 
    resizable: false, 
    height: 140, 
    modal: true, 
    buttons: { 
     "Delete": function() { 
     var id = $(this).data('item-id'); 
     //Do something with the id 
     $(this).dialog("close"); 
     }, 
     "Cancel": function() { 
     $(this).dialog("close"); 
     } 
    } 
    }); 

    $("a[id^='delete']").each(function() { 
    $(this).click(function() { 
     var id = $(this).parent().attr('data-id'); 
     $("#delete-snapshot").data('item-id', id).dialog('open'); 
     return false; 
    }); 

    }); 
}) 

EDIT:ダイアログのIDミスマッチに気付いただけです。しかし、問題はあなたの質問からコピーしたコードにあります。

+2

+ 1の.dataを利用していますが、それぞれのクリックイベントではなくアンカーのクリックに対して.delegateを使用します – redsquare

+1

私はコードを貼り付けたときに申し訳ありません。名前を使用して一般的な例にしたいと思っています。よく知っていると私はそのIDを逃した。あなたの例は治療法です。 @redsquare - あなたのアドバイスを '.delegate()'にお願いします。 – Kev

+1

@redquareうん! .dataは実際にjQueryを書くための自分の方法を変更しました。もう醜いハッキングやhref解析はありません。 .delegateを使用した場合の利得はいくらですか?同じ量のコードでなければならず、パーフェクトが良くないはずはないと理解しています。または私は何かを逃していますか? –

関連する問題