我正在爲頁面上的每個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');
難道你不能只是刪除中間的add_action調用,並將JavaScript事件處理程序直接包含在你的PHP中,或只調用一次? – dragon66
它需要一個鉤子,以避免它太早創建。 – shanebp