0

首先我要感谢你们每一天的帮助,回答问题。你为我节省了很多时间,我也学到了很多东西。

我让我们在表单上说这个按钮。

<button type="button" value="Adventurous" name="adv" id="adv">Adventurous</button>
<button type="button" value="Discovery" name="disc" id="disc">Discovery</button>
<button type="button" calue="Easy-going" name="easy" id="easy">Easy-going</button>

当用户单击一个按钮以指定他在我们的示例中的感觉时,我在 jquery 上有以下代码来更改按钮的状态为选中并更改类(以不同的颜色显示等)

$(".tailor_field .tailor_mood_btn button").click(function() {
         var checked = $(this).attr('checked');
         $the_image = $(this).find("img");
        if(checked){
            $(this).removeClass("mood_on");
            $(this).attr('checked', false);
            $the_image.attr("src", templateDir+"/images/btn_on.png");
        }
        else{
            $(this).addClass("mood_on");
            $(this).attr('checked', true);
            $the_image.attr("src", templateDir+"/images/btn_off.png");
        }
    });

所以当用户按下提交时,我想在服务器端(php)检查用户点击了哪些按钮?

其次,我想动态插入按钮。即在我的数据库中有一个字符串,将其分解为一个数组并循环每个元素以创建按钮等。如果我从一开始就不知道有多少按钮及其名称,我将如何知道要检查什么?也许有会话(如果有其他解决方案,我想避免它)?

非常感谢!

4

2 回答 2

1

我会这样做:

var checkedButtons = $(".tailor_field .tailor_mood_btn button[checked=true]");

$("form").submit(function() {
  var data = [];
  checkedButtons.each(function(index, element) {
    var name = element.attr('name');
    var value = element.val();
    data[name] = value;
  });

  $.post('file.php', data);
});

data 变量是一个数组,其中键是单击按钮的名称,这些按钮的值是这些按钮的值。稍后,对需要此数据的文件 (file.php) 发出 ajax 请求,其中数据数组在超全局 $_POST (ex. $_POST['adv'] = "Adventurous")中可用

于 2013-04-18T12:35:19.223 回答
1

我认为最好的答案是只使用复选框列表。这就是他们的目的。

但是,如果您想使用特殊按钮,这是一种使用隐藏文件作为输入的方法,而不是实际的按钮。我不知道元素“按钮”是否具有选中的属性。

我只是使用了一个简单的小 javascript 来更改输入的值,您可以调整您当前的功能。请注意,我给可点击按钮一个新的 ID,将“_button”附加到数据库中的名称。

<?php

$string = "Adventerous,Discovery,Easy-Going"; /* this is from your database */
$delimiter = ",";
$button_values = explode($delimiter, $string);

?>
<html>
<body>
<script type="text/javascript" >
function checkbutton(id) {
         var val = document.getElementById(id).value;
         if (val == 0) 
            val = 1;
         else 
            val = 0;

         document.getElementById(id).value = val;
         alert("Clicked: " + id);
}
</script>
<form action="form-catch.php" method="post">
<?php

foreach($button_values as $value) {
    echo '<button type="button" 
                onClick="checkbutton(\''.$value.'\')">'.$value .'</button>
    <input type="hidden" name="'.$value.'" id="'. $value .'" value="0" ><br>';

}

?>
<input type="submit" value="submit">
</form>
</body></html>

然后在服务器上,表单将从字符串中发送按钮名称,如果该按钮被选中,则发送 0 或 1。

<?php 
/* quick form checker to show what was clicked in the other form */
foreach($_POST as $key => $val)
    echo "<br>    $key : $val";   
?>

即使你不使用确切的代码,我希望这个概念能让你朝着正确的方向前进。

1) 将数据作为表单输入发送。

2) 遍历发送过来的任何内容并检查设置值。

于 2013-04-18T12:48:37.570 回答