2016-07-04 32 views
0

人如何做一個複選框,如果我檢查它的複選框的值將發送到數據庫,而無需提交表單函數來發送複選框的值如何使用jQuery和Ajax與笨

這是我的複選框:

<input id="active_banner" type='checkbox' name='active_banner' value='1' title='Active Banner' <?=($data->promotion_active == 1)? "checked":""?> /> 

,這是我的jquery:

<script> 
$("#active_banner").click(function() { 
    var id = "<?=$data->promotion_banner_id?>" 
    var active = $("#active_banner").val(); 
    jQuery.ajax({ 
     type: "GET", 
     url: "/ADMIN/ajax/active_banner/", 
     data: {id:id,active:active}, 
    }); 

    }); 
</script> 

我試圖檢查,但是,有沒有發生在我的Ajax控制器有包含:

function active_banner(){ 
    $id = $this->input->get("id",true); 
    $active = $this->input->get("active",true); 

    $this->Control_panel_m->update_banner_active($id,$active); 
    redirect('/ADMIN/'.country_code."/Edit_promotion_banner","refresh"); 

} 

夥計們你能幫助我如何使它工作嗎?

+1

你怎麼知道什麼都沒有發生?你沒有成功處理程序,也沒有錯誤處理程序,並指出重定向將發回任何其他控制器回聲。它不會導致你的頁面重定向 – charlietfl

+1

如果用戶也取消選中複選框,同樣使用'click'將觸發,但你不檢查它的狀態 – charlietfl

+0

@charlietfl你能幫我解決這個問題嗎?因爲當我檢查我沒有看到任何腳本在螢火蟲運行 – Kelvin

回答

0

你需要檢查是否選擇了檢查框,單擊將觸發兩個檢查和未檢查的事件

嘗試使用類似以下

<script> 
$("#active_banner").on("change",function(e) { 
     var id = "<?=$data->promotion_banner_id?>" 
     var active = $(this).is(":checked"); 
     jQuery.ajax({ 
     type: "GET", 
     url: "/ADMIN/ajax/active_banner/", 
     data: {id:id,active:active}, 
     }); 
    }); 
</script> 
+0

上打開或關閉它,而不管檢查狀態是什麼...... OP需要更新服務器的兩個條件 – charlietfl

+0

更新了代碼,現在在您的代碼中,問題在於您發送的複選框的值始終保持不變對於檢查/未檢查狀態都是相同的。 –

+0

正確,但我的觀點是OP需要解決兩種情況需要做什麼,因此可能還需要不同的屬性。不太清楚這是如何在服務器上運行的,儘管 – charlietfl

0

嘗試以下

$(function(){ 
$("input[name='active_banner']").click(function() { 
    var id = "<?=$data->promotion_banner_id?>" 
    var active = $("#active_banner").val(); 
    if($(this).is("not(:checked)")){ 
     active = 0; 
    }; 
    jQuery.ajax({ 
     type: "GET", 
     url: "/ADMIN/ajax/active_banner/", 
     data: {id:id,active:active}, 
     success: function(data){ 
      window.location = data;//redirect with javascript 
     } 
    }); 
    }); 
    }); 

php:

function active_banner(){ 
    $id = $this->input->get("id",true); 
    $active = $this->input->get("active",true); 

    $this->Control_panel_m->update_banner_active($id,$active); 
    return '/ADMIN/'.$country_code."/Edit_promotion_banner";//return the url to redirect assuming country_code is a variable 

} 
+0

關於停用是什麼? – charlietfl

+0

我已經跟着你的代碼,但是當我檢查沒有任何腳本在螢火蟲中,就像沒有發生 – Kelvin

+0

頁面重定向? – madalinivascu

0

第一件事:如果您已包括您的jQuery的文件,如下所示:

<script type="text/javascript" src="//code.jquery.com/jquery-1.12.3.min.js"> 
<script> 
$(document).ready(function() { 
$("#active_banner").change(function() { 
    var id = "<?=$data->promotion_banner_id?>" 
    var active = $("#active_banner").val(); 
    jQuery.ajax({ 
     type: "GET", 
     url: "/ADMIN/ajax/active_banner/", 
     data: {id:id,active:active}, 
    }); 
}); 
}); 
</script> 

在上述情況下,有必要關閉</script>標籤的包含語句。因此,jQuery的包括應該是:

<script type="text/javascript" src="//code.jquery.com/jquery-1.12.3.min.js"></script> 

的jQuery的版本可能是一樣的,你已經使用&它不一定需要是什麼,我在這裏提到。

其次,既然你說你是通過一個foreach循環顯示的複選框,你應該把在其他屬性上的複選框,例如:數據-ID

<input id="active_banner" type='checkbox' name='active_banner' value='1' title='Active Banner' <?=($data->promotion_active == 1)? "checked":""?> data-id="YOUR_UNIQUE_CHECKBOX_ID" class="active_banner_chk" />

其中YOUR_UNIQUE_CHECKBOX_ID是一個獨特的值每個複選框都不相同。

然後,修改您的jQuery的是:

<script> 
$(document).ready(function() { 
$(".active_banner_chk").click(function() { 
    var id = "<?=$data->promotion_banner_id?>"; 
    var active = 0; 

    if($(this).is(':checked')) { 
     var active = $(this).attr('data-id'); 
    } 
    jQuery.ajax({ 
     type: "GET", 
     url: "/ADMIN/ajax/active_banner/", 
     data: {id:id,active:active}, 
    }); 
}); 
}); 
</script> 

也避免了增加數據-ID &的額外屬性,而不是有你的jQuery & HTML元素象下面這樣:

<script> 
$(document).ready(function() { 
$(".active_banner_chk").click(function() { 
    var id = "<?=$data->promotion_banner_id?>"; 
    var active = 0; 

    if($(this).is(':checked')) { 
     var active = $(this).val(); 
    } 
    jQuery.ajax({ 
     type: "GET", 
     url: "/ADMIN/ajax/active_banner/", 
     data: {id:id,active:active}, 
    }); 
}); 
}); 
</script> 
<input id="active_banner" type='checkbox' name='active_banner' value='1' title='Active Banner' <?=($data->promotion_active == 1)? "checked":""?> class="active_banner_chk" /> 

呼叫你的jQuery基於類名稱&然後使用$this.val()而不是$('#active_banner').val()確保您獲得當前複選框的值而不是第一個che ckbox總是。

+0

爲什麼你把'var active = 0'?我需要發送它成爲1,只要我包含在輸入值 – Kelvin

+0

Incase複選框沒有被選中,那麼它會將'active'的值發送爲0.如果它被選中,那麼它會發送輸入值爲該複選框。 – tovishalck