2012-05-10 63 views
1

我正在爲頁面上的每個list_item添加一個按鈕。 生成的按鈕及其正確的ID。 按鈕值按照它應該改變 - 如警報中所示。ajax點擊單個按鈕時觸發每個按鈕

但是,只需單擊一次按鈕,警報就會觸發頁面上按鈕的次數。 警報始終顯示相同(並且正確)的按鈕ID。 如果沒有提示,在此期間如果單擊其他按鈕,則會導致按鈕值來回切換。

生成按鈕:

function create_saved_message_button() { 
    $button_label = "Save"; 
?> 
    <td width="15%" class="thread-options"> 
     <input type="button" class="savedbutton" value = "<?php echo $button_label ?>" id = "<?php echo message_thread_id(); ?>" /> 
    </td> 
<?php 
} 

阿賈克斯:

function saved_message_button_javascript() { 
?> 
    <script type="text/javascript" > 
    jQuery(document).ready(function($) { 

     $('.savedbutton').click(function(event){ 
     event.preventDefault(); 
      var button = $(this); 
      var butt_txt = $(button).attr('value'); 

      alert($(button).attr("id")); 

      $(button).attr({'disabled': true}); 
      var data = { 
       action: 'saved_button_clicked', 
      }; 

      $.get(ajaxurl, data, function(response) { 
       if(butt_txt == 'Save') { 
        $(button).attr('value', 'Un-Save'); 
       } 
       else { 
        $(button).attr('value', 'Save'); 
       } 
      }); 
      $(button).attr({'disabled': false}); 
      return false; 
     }); 

    }); 
    </script> 
<?php 
} 

有什麼辦法可以阻止多個警報? 我認爲這將解決價值轉換問題。

然後我只需要把按鈕的ID傳遞給PHP函數saved_button_clicked

的add_actions:

add_action('messages_inbox_list_item', 'create_saved_message_button', 1); 
//this was the problem 
    //add_action('messages_inbox_list_item', 'saved_message_button_javascript'); 
//the solution - use this instead 
add_action('after_member_messages_threads', 'saved_message_button_javascript'); 
    add_action('wp_ajax_saved_button_clicked', 'process_save_button_clicked'); 
+0

難道你不能只是刪除中間的add_action調用,並將JavaScript事件處理程序直接包含在你的PHP中,或只調用一次? – dragon66

+0

它需要一個鉤子,以避免它太早創建。 – shanebp

回答

1

也許我誤解的東西。我創建了一個帶有5個按鈕和一個JavaScript的HTML,但是我找不到你描述的行爲。看看here

+0

龍 - 謝謝。 我在您的示例html源代碼中看到JavaScript只出現一次。 對於我的,每個按鈕都會顯示。 我認爲,這是一個Wordpress頁面。 而我正在使用add_actions :(見上面的editied post) 所以也許問題是如何生成JavaScript只有一次...? – shanebp

+0

@ sam3d:這絕對是問題所在。您已多次添加事件處理程序。 – dragon66

+0

是的 - 在所有list_items被創建並且(愚蠢)問題被解決之後發現一個鉤子。感謝您創造小提琴。 – shanebp