内联编辑html表与ajax php复选框&选择

时间:2014-01-27 01:21:40

标签: javascript php jquery html ajax

最终编辑:我放弃了尝试获取复选框以使用此方法。相反,我只是使用带有“是”和“否”的组合框。由于SE用户提供了一些出色的帮助,Combos工作得非常完美:)它实际上变得更好,IMO。带有内联编辑的复选框,我实现它的方式可能导致意外检查或取消选中框。组合是额外的2次点击,但值得消除事故。它看起来也很棒,因为我只是交换了一个红色的“x”或绿色“检查”以指示开关。看起来真的很棒。再次感谢大家的帮助!

我正在使用9lessons.info中的方法创建一个包含内联可编辑行的表。到目前为止,它在选择和复选框时工作但不是很好。使用选择时,它会更新值,但是当它隐藏输入时(在tr外部点击时),select的值显示(fk id字段),而不是所选选项标记的打开和关闭之间的文本(名称字段)。我可以在jQuery中看到它显示的值,但是如何告诉它使用选项中的文本而不是值?

jQuery:

$(document).ready(function(){
    $(".edit_tr").click(function(){
        var ID=$(this).attr('id');
        // hide
        $("#name_"+ID).hide();
        $("#position_"+ID).hide();
        $("#parent_nav_"+ID).hide();
        $("#is_disp_"+ID).hide();
        // show
        $("#name_input_"+ID).show();
        $("#position_input_"+ID).show();
        $("#parent_nav_input_"+ID).show();
        $("#is_disp_input_"+ID).show();
    }).change(function(){
        var ID=$(this).attr('id');
        var name=$("#name_input_"+ID).val();
        var position=$("#position_input_"+ID).val();
        var parent_nav = $("#parent_nav_input_"+ID).val();
        var is_disp = $("#is_disp_"+ID).prop("checked") ? 1 : 0;
        // data string
        var dataString = 'id='+ ID +'&name='+name+'&position='+position+'&parent_nav='+parent_nav+'&is_disp='+is_disp;

        if(name.length > 0 && position.length > 0 && parent_nav.length > 0) {
            var parent_nav_txt = $("#parent_nav_input_"+ID+" option:selected").text();
            $.ajax({
                type: "POST",
                url: "admin_nav_edit.php",
                data: dataString,
                cache: false,
                success: function(html) {
                    $("#name_"+ID).html(name);
                    $("#position_"+ID).html(position);
                    $("#parent_nav_"+ID).html(parent_nav_txt);
                    $("#is_disp_"+ID).html(is_disp);
                }
            });
        } else {
            alert('Enter something.');
        }
    });
    //edit input box click action
    $(".editbox").mouseup(function(){
        return false
    });
    //outsire click action
    $(document).mouseup(function() {
        $(".editbox").hide();
        $(".text").show();
    });
}); 

我知道脚本中的'is_disp'变量没有检索到正确的东西,但是其他一切都有效,所以我认为我不需要发布我的其余代码,但是如果有必要,我会的。

那么,我应该放置什么才能让它识别出复选框未选中,并确保将0发送到数据库,或者如果选中则返回1?这就是我一直在做的事情

使用select,我不知道该怎么做,或者如何定位select标签之间的值而不是value =“”值,同时确保value =“”值存储在db。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

在复选框上调用.val()将始终返回在DOM中设置的值。你应该这样做:

var is_disp = $("#is_disp_input_"+ID).is(':checked');

如果元素具有CSS选择器,则.is() jQuery函数返回true,在本例中为:checked

此外,在服务器上,您应该使用if(!empty($_POST['myvar'])) {}而不是if(isset($_POST['myvar'])) {}检查复选框变量是真还是假,因为即使myvar为零或假,isset()也会返回true!

答案 1 :(得分:0)

要获取选择框选项的文字,请使用:selected选择器和.text()

var text = $("#selectID option:selected").text();
var value = $("#selectID option:selected").val();

选中复选框,检查.prop("checked")

的返回情况
var check = $("#checkboxID").prop("checked") ? 1: 0;

编辑:

var parent_nav_text = $("#parent_nav_input_"+ID+" option:selected").text();

然后在你的ajax函数中

       $.ajax({
            type: "POST",
            url: "admin_nav_edit.php",
            data: dataString,
            cache: false,
            success: function(html) {
                $("#name_"+ID).html(name);
                $("#position_"+ID).html(position);
                $("#parent_nav_"+ID).html(parent_nav_text);
                $("#is_disp_"+ID).html(is_disp);
            }
        });