0

我正在编写一个 PHP 自我评估表,它有 5 个问题类别,每个类别 10 个问题。在应用程序的开头,我有 5 个复选框来表示这些类别,它们会被自动选中。这个想法是,每当用户取消选中一个类别时,该类别的问题会立即从表单中消失,当他们再次检查时,它们会回来。在 jQuery 和 AJAX 的帮助下应该可以实现的东西。

我使用 CodeIgniter 的 form_helper 制作了复选框:

for($i = 1; $i<=5; $i++) {
$this->formapp_model->printCatName($i);
$data = array('name'=>'category$i', 'id'=>'category$i', 'value'=>'$i', 'checked'=>TRUE);
echo form_checkbox($data);
}

我有一个功能可以在类别 ID 之后从数据库中打印该类别的所有 10 个问题,当我按原样发布它们时效果很好:

$this->formapp_model->printCategory(1);
$this->formapp_model->printCategory(2);
$this->formapp_model->printCategory(3);
$this->formapp_model->printCategory(4);
$this->formapp_model->printCategory(5);

使用这个帮助: 通过 jQuery 将复选框是否被选中,传递给 PHP 我能够为 jQuery 收集它,我需要类似的东西

var category1 = $('#category1:checked').val();

为了检查复选框是否已被选中。我也试过

var category1 = $('#category1:checked').post();

因为使用 post 来让 PHP 识别它似乎是合乎逻辑的。

对于打印选择,例如

if (isset($_POST['category 1'])) { $this->formapp_model->printCategory(1); } else { echo "This category is not selected."; }

我试过了,但 PHP 无法识别 jQuery 给出的消息,这意味着无论复选框是否被选中,该类别的问题都会永久消失。我检查echo var_export($_POST);并注意到所有 jQuery 打印出来的是:array ()。上面提到的问题非常有用,但错过了一些我需要让它工作的信息。提问者还使用数组而不是单独的变量,所以我不知道如何正确编辑它。

我是 jQuery 和 AJAX 的完全新手,所以我很难掌握我需要什么才能让 jQuery 和 PHP 按照我描述的方式进行动态通信。我在 stackoverflow 上跑来跑去寻找类似的案例,但没有一个完全满足我的需要。但是,如果这是一个重复的问题,我深表歉意。感谢任何帮助的人!

4

1 回答 1

2

PHP 是服务器端,您需要在客户端出现/消失问题,这意味着您希望使用 jQuery 本身(或常规 js,但由于您已经在加载 jQuery,因此使用库本身会更快)。

老实说,我并没有真正关注你的观点是如何运作的,所以我只会给出一些基本的代码来给你这个想法。您创建复选框和问题,为每个问题提供唯一 ID。然后在复选框的单击方法中,您确定要显示哪些问题。

HTML:

<div id="checkboxes">
    <input type="checkbox" id="box1" class="check" checked="checked"/>
    <input type="checkbox" id="box2" class="check" checked="checked" />
    <input type="checkbox" id="box3" class="check" checked="checked" />
    <input type="checkbox" id="box4" class="check" checked="checked" />
    <input type="checkbox" id="box5" class="check" checked="checked" />
</div>
<div id="question1" class="question">
    <p>Question 1</p>
</div>
<div id="question2" class="question">
    <p>Question 2</p>
</div>
<div id="question3" class="question">
    <p>Question 3</p>
</div>
<div id="question4" class="question">
    <p>Question 4</p>
</div>
<div id="question5" class="question">
    <p>Question 5</p>
</div>

jQuery:

$(".check").on("click",function(){
    var id = $(this).attr("id");
    var id2 = id.substr(id.length -1);
    var question = "question"+id2;
    if($(this).is(":checked"))
    {
        $("#"+question).css("display","block");
    } else {
        $("#"+question).css("display","none");
    }
});

演示:http: //jsfiddle.net/calder12/taSPX/1

于 2013-02-07T11:51:22.177 回答