首页 \ 问答 \ JTable和验证引擎的问题(Problems With JTable and Validation Engine)

JTable和验证引擎的问题(Problems With JTable and Validation Engine)

我在使用PHP + JQuery的网站上工作。 对于CRUD操作,我使用JTable和validationEngine进行表单验证。 我正在为密码更改创建一个新的JQuery Dialog,但是当我关闭并再次打开密码对话框时,validationEngine会返回“True”。 这是我的完整javascript代码:

<script type="text/javascript">
    $(document).ready(function() {
        $("#catalogoAlumnos").jtable({
            title : 'Alumnos',
            sorting : true,
            actions : {
                listAction : '../php/alumnosActions/selectAlumnos.php',
                createAction : '../php/alumnosActions/agregarAlumno.php',
                updateAction : '../php/alumnosActions/updateAlumno.php',
                deleteAction : '../php/alumnosActions/deleteAlumno.php'
            },
            fields : {
                ficha : {
                    title : '',
                    width : '1%',
                    sorting : false,
                    edit : false,
                    create : false,
                    display : function(Data) {
                        var $img = $('<button class="jtable-command-button jtable-view-command-button" src="../style/jtable/metro/list.png" title="Ver Más..." />');
                        $img.click(function() {
                            var $div = $("<div id='dialog' title='Información'>" + "<strong><label class='jtable-input-label'>Nombre Completo: </label></strong>" + Data.record.apellidosalumno + " " + Data.record.nombresalumno + "<br>" + "<strong><label class='jtable-input-label'>Sexo: </label></strong>" + Data.record.sexoalumno + "<br>" + "<strong><label class='jtable-input-label'>Dirección Completa: </label></strong>" + Data.record.direccionalumno + ", " + Data.record.ciudadalumno + ", " + Data.record.estadoalumno + ", " + Data.record.paisalumno + "<br>" + "<strong><label class='jtable-input-label'>Periodo de Registro: </label></strong>" + Data.record.periodoregistroalumno + " Del " + Data.record.anoregistroalumno + "<br>" + "<strong><label class='jtable-input-label'>Periodo Actual: </label></strong>" + Data.record.periodoactualalumno + " Del " + Data.record.anoactualalumno + "<br>" + "<strong><label class='jtable-input-label'>Semestre: </label></strong>" + Data.record.semestrealumno + "</div>");
                            $div.dialog({
                                modal : true
                            });
                        });
                        return $img;
                    }
                },
                num_control : {
                    key : true,
                    title : 'No. Control',
                    create : true,
                    edit : false,
                    inputClass : 'validate[required]'
                },
                password : {
                    list : false,
                    title : 'Contraseña',
                    type : 'password',
                    create : true,
                    edit : false,
                    inputClass : 'validate[required]'
                },
                apellidosalumno : {
                    title : 'Apellidos',
                    inputClass : 'validate[required]'
                },
                nombresalumno : {
                    title : 'Nombre',
                    inputClass : 'validate[required]'
                },
                sexoalumno : {
                    list : false,
                    title : 'Sexo',
                    create : true,
                    edit : true,
                    options : {
                        'M' : 'Masculino',
                        'F' : 'Femenino'
                    }
                },
                direccionalumno : {
                    title : 'Dirección',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required]'
                },
                ciudadalumno : {
                    title : 'Ciudad',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required]'
                },
                estadoalumno : {
                    title : 'Estado',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required]'
                },
                paisalumno : {
                    title : 'Pais',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required]'
                },
                carreraalumno : {
                    title : 'Carrera',
                    options : '../php/carrerasActions/selectCarrerasDropDown.php'
                },
                periodoregistroalumno : {
                    title : 'Periodo de Registro',
                    options : {
                        '1' : 'Ene-Abril',
                        '2' : 'Mayo-Agosto',
                        '3' : 'Sep-Dic'
                    },
                    list : false,
                    create : true,
                    edit : true
                },
                anoregistroalumno : {
                    title : 'Año de Registro',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required,custom[integer],min[1980]]'
                },
                periodoactualalumno : {
                    title : 'Periodo Actual',
                    options : {
                        '1' : 'Ene-Abril',
                        '2' : 'Mayo-Agosto',
                        '3' : 'Sep-Dic'
                    },
                    list : false,
                    create : true,
                    edit : true
                },
                anoactualalumno : {
                    title : 'Año del Periodo Actual',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required,custom[integer],min[1980]]'
                },
                semestrealumno : {
                    title : 'Semestre',
                    inputClass : 'validate[required,custom[integer]]'
                },
                emailalumno : {
                    title : 'E-mail',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required,custom[email]]'
                },
                cambiar_password : {
                    title : '',
                    width : '1%',
                    sorting : false,
                    edit : false,
                    create : false,
                    display : function(Data) {
                        var $img = $('<button class="jtable-command-button jtable-password-command-button" title="Cambiar Contraseña" />');
                        $img.click(function() {
                            var $div = $("<div id='dialog2' title='Cambiar Contraseña'>" + "<form id='cambia_pass' class='jtable-dialog-form' style='-moz-column-count:auto;-webkit-column-count:auto;column-count:auto;-moz-column-gap:auto;-webkit-column-gap:auto;column-gap:auto;'>" + "<div class='jtable-input-field-container'>" + "<div class='jtable-input-label'>Antigua Contraseña</div>" + "<div class='jtable-input jtable-password-input'><input type='password' class='validate[required]' name='antiguo_pass' id='antiguo_pass'/></div>" + "</div>" + "<div class='jtable-input-field-container'>" + "<div class='jtable-input-label'>Escriba Contraseña</div>" + "<div class='jtable-input jtable-password-input'><input type='password' class='validate[required]' name='nuevo_pass1' id='nuevo_pass1'/></div>" + "</div>" + "<div class='jtable-input-field-container'>" + "<div class='jtable-input-label'>Repita Contraseña</div>" + "<div class='jtable-input jtable-password-input'><input type='password' class='validate[required],equals[nuevo_pass1]' name='nuevo_pass2 id='nuevo_pass2'/></div>" + "</div>" + "</form>" + "</div>");
                            $div.dialog({
                                modal : true,
                                close : function(event, ui) {
                                    $("#cambia_pass").validationEngine('hide');
                                    $("#cambia_pass").validationEngine('detach');
                                },
                                buttons : {
                                    "Actualizar" : function() {
                                        if ($("#cambia_pass").validationEngine('validate')) {

                                        }
                                    },
                                    "Cancelar" : function() {
                                        $("#cambia_pass").validationEngine('hide');
                                        $("#cambia_pass").validationEngine('detach');
                                        $(this).dialog("close");
                                    }
                                }
                            });
                        });
                        return $img;
                    }
                }
            },
            formSubmitting : function(event, data) {
                return data.form.validationEngine('validate');
            },
            formClosed : function(event, data) {
                data.form.validationEngine('hide');
                data.form.validationEngine('detach');
            }
        });
        $("#catalogoAlumnos").jtable('load');

        $('#cmdBuscar').click(function(e) {
            e.preventDefault();
            $('#catalogoAlumnos').jtable('load', {
                no_control : $('#search_nocontrol').val(),
                apellidos : $('#search_apellidos').val(),
                nombres : $('#search_nombres').val(),
                carrera : $('#search_carrera').val(),
                semestre : $('#search_semestre').val(),
            });
        });
    }); 
</script>

i'm working in a site using PHP+JQuery. For CRUD operations i'm using JTable with validationEngine for form validation. I'm creating a new JQuery Dialog for Password Change, but validationEngine returns me "True" when i close and open again the password dialog. this is my full javascript code:

<script type="text/javascript">
    $(document).ready(function() {
        $("#catalogoAlumnos").jtable({
            title : 'Alumnos',
            sorting : true,
            actions : {
                listAction : '../php/alumnosActions/selectAlumnos.php',
                createAction : '../php/alumnosActions/agregarAlumno.php',
                updateAction : '../php/alumnosActions/updateAlumno.php',
                deleteAction : '../php/alumnosActions/deleteAlumno.php'
            },
            fields : {
                ficha : {
                    title : '',
                    width : '1%',
                    sorting : false,
                    edit : false,
                    create : false,
                    display : function(Data) {
                        var $img = $('<button class="jtable-command-button jtable-view-command-button" src="../style/jtable/metro/list.png" title="Ver Más..." />');
                        $img.click(function() {
                            var $div = $("<div id='dialog' title='Información'>" + "<strong><label class='jtable-input-label'>Nombre Completo: </label></strong>" + Data.record.apellidosalumno + " " + Data.record.nombresalumno + "<br>" + "<strong><label class='jtable-input-label'>Sexo: </label></strong>" + Data.record.sexoalumno + "<br>" + "<strong><label class='jtable-input-label'>Dirección Completa: </label></strong>" + Data.record.direccionalumno + ", " + Data.record.ciudadalumno + ", " + Data.record.estadoalumno + ", " + Data.record.paisalumno + "<br>" + "<strong><label class='jtable-input-label'>Periodo de Registro: </label></strong>" + Data.record.periodoregistroalumno + " Del " + Data.record.anoregistroalumno + "<br>" + "<strong><label class='jtable-input-label'>Periodo Actual: </label></strong>" + Data.record.periodoactualalumno + " Del " + Data.record.anoactualalumno + "<br>" + "<strong><label class='jtable-input-label'>Semestre: </label></strong>" + Data.record.semestrealumno + "</div>");
                            $div.dialog({
                                modal : true
                            });
                        });
                        return $img;
                    }
                },
                num_control : {
                    key : true,
                    title : 'No. Control',
                    create : true,
                    edit : false,
                    inputClass : 'validate[required]'
                },
                password : {
                    list : false,
                    title : 'Contraseña',
                    type : 'password',
                    create : true,
                    edit : false,
                    inputClass : 'validate[required]'
                },
                apellidosalumno : {
                    title : 'Apellidos',
                    inputClass : 'validate[required]'
                },
                nombresalumno : {
                    title : 'Nombre',
                    inputClass : 'validate[required]'
                },
                sexoalumno : {
                    list : false,
                    title : 'Sexo',
                    create : true,
                    edit : true,
                    options : {
                        'M' : 'Masculino',
                        'F' : 'Femenino'
                    }
                },
                direccionalumno : {
                    title : 'Dirección',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required]'
                },
                ciudadalumno : {
                    title : 'Ciudad',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required]'
                },
                estadoalumno : {
                    title : 'Estado',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required]'
                },
                paisalumno : {
                    title : 'Pais',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required]'
                },
                carreraalumno : {
                    title : 'Carrera',
                    options : '../php/carrerasActions/selectCarrerasDropDown.php'
                },
                periodoregistroalumno : {
                    title : 'Periodo de Registro',
                    options : {
                        '1' : 'Ene-Abril',
                        '2' : 'Mayo-Agosto',
                        '3' : 'Sep-Dic'
                    },
                    list : false,
                    create : true,
                    edit : true
                },
                anoregistroalumno : {
                    title : 'Año de Registro',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required,custom[integer],min[1980]]'
                },
                periodoactualalumno : {
                    title : 'Periodo Actual',
                    options : {
                        '1' : 'Ene-Abril',
                        '2' : 'Mayo-Agosto',
                        '3' : 'Sep-Dic'
                    },
                    list : false,
                    create : true,
                    edit : true
                },
                anoactualalumno : {
                    title : 'Año del Periodo Actual',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required,custom[integer],min[1980]]'
                },
                semestrealumno : {
                    title : 'Semestre',
                    inputClass : 'validate[required,custom[integer]]'
                },
                emailalumno : {
                    title : 'E-mail',
                    list : false,
                    create : true,
                    edit : true,
                    inputClass : 'validate[required,custom[email]]'
                },
                cambiar_password : {
                    title : '',
                    width : '1%',
                    sorting : false,
                    edit : false,
                    create : false,
                    display : function(Data) {
                        var $img = $('<button class="jtable-command-button jtable-password-command-button" title="Cambiar Contraseña" />');
                        $img.click(function() {
                            var $div = $("<div id='dialog2' title='Cambiar Contraseña'>" + "<form id='cambia_pass' class='jtable-dialog-form' style='-moz-column-count:auto;-webkit-column-count:auto;column-count:auto;-moz-column-gap:auto;-webkit-column-gap:auto;column-gap:auto;'>" + "<div class='jtable-input-field-container'>" + "<div class='jtable-input-label'>Antigua Contraseña</div>" + "<div class='jtable-input jtable-password-input'><input type='password' class='validate[required]' name='antiguo_pass' id='antiguo_pass'/></div>" + "</div>" + "<div class='jtable-input-field-container'>" + "<div class='jtable-input-label'>Escriba Contraseña</div>" + "<div class='jtable-input jtable-password-input'><input type='password' class='validate[required]' name='nuevo_pass1' id='nuevo_pass1'/></div>" + "</div>" + "<div class='jtable-input-field-container'>" + "<div class='jtable-input-label'>Repita Contraseña</div>" + "<div class='jtable-input jtable-password-input'><input type='password' class='validate[required],equals[nuevo_pass1]' name='nuevo_pass2 id='nuevo_pass2'/></div>" + "</div>" + "</form>" + "</div>");
                            $div.dialog({
                                modal : true,
                                close : function(event, ui) {
                                    $("#cambia_pass").validationEngine('hide');
                                    $("#cambia_pass").validationEngine('detach');
                                },
                                buttons : {
                                    "Actualizar" : function() {
                                        if ($("#cambia_pass").validationEngine('validate')) {

                                        }
                                    },
                                    "Cancelar" : function() {
                                        $("#cambia_pass").validationEngine('hide');
                                        $("#cambia_pass").validationEngine('detach');
                                        $(this).dialog("close");
                                    }
                                }
                            });
                        });
                        return $img;
                    }
                }
            },
            formSubmitting : function(event, data) {
                return data.form.validationEngine('validate');
            },
            formClosed : function(event, data) {
                data.form.validationEngine('hide');
                data.form.validationEngine('detach');
            }
        });
        $("#catalogoAlumnos").jtable('load');

        $('#cmdBuscar').click(function(e) {
            e.preventDefault();
            $('#catalogoAlumnos').jtable('load', {
                no_control : $('#search_nocontrol').val(),
                apellidos : $('#search_apellidos').val(),
                nombres : $('#search_nombres').val(),
                carrera : $('#search_carrera').val(),
                semestre : $('#search_semestre').val(),
            });
        });
    }); 
</script>

原文:https://stackoverflow.com/questions/18304215
更新时间:2023-07-29 07:07

最满意答案

这不是一个错误。 这是不正确使用内联汇编的结果。 在包含return语句的情况下,编译器不检查asm语句。 如果在asm块之前已将%rax设置为零,则指令将覆盖该值。 编译器可以在asm块之前自由执行此操作,因为您尚未通知任何寄存器输出,clobbers等。

如果不包含return语句,则不能依赖返回值。 这就是为什么clang(这就是llvm-gcc与Xcode 5.1的关系 - 它不是gcc前端)发出警告的原因 。 gcc-4.8.2似乎适用于OS X - 但由于代码在两种情况下都不正确,所以它只是“运气”。 通过优化: -O2 ,它不再有效。 gcc默认不发出警告,这是至少使用-Wall一个很好的理由。

{
    unsigned long long ret;
    __asm__ ("movq %rsp, %0" : "=r" (ret));
    return ret;
}

永远有效。 volatile不是必需的,因为编译器正在使用输出,因此它不能丢弃asm语句。 甚至将第一行更改为unsigned long long ret = 0; - 编译器显然不能自由重新排序。


This is not a bug. It's the result of incorrect use of inline assembly. In the case where the return statement is included, the compiler does not inspect the asm statement. If %rax has already been set to zero before the asm block, the instruction overwrites that value. The compiler is free to do this before the asm block, since you haven't informed it of any register outputs, clobbers, etc.

In the case where no return statement is included, you can't rely on the return value. Which is why clang (that's what llvm-gcc is with Xcode 5.1 - it's not the gcc front end) issues a warning. gcc-4.8.2 appears to work on OS X - but because the code is incorrect in both cases, it's just 'luck'. With optimization: -O2, it no longer works. gcc doesn't issue a warning by default, which is a good reason to at least use -Wall.

{
    unsigned long long ret;
    __asm__ ("movq %rsp, %0" : "=r" (ret));
    return ret;
}

always works. volatile is not necessary, as the compiler is using an output, so it cannot discard the asm statement. Even changing the first line to unsigned long long ret = 0; - the compiler is obviously not free to reorder.

相关问答

更多
  • 您设法混合了microsoft和sysv约定。 正确的方法是: mov rcx, textformat movq xmm1, qword [pi] movq rdx, xmm1 ; duplicate into the integer register sub rsp, 40 ; allocate shadow space and alignment (32+8) call printf add rsp, 40 ; restore stack xor eax, eax ret 根据MS ...
  • 看起来你不熟悉如何访问数组元素。 此外,未使用result32值,因此无需打印它。 我认为这就是你的意图: printf("Before calling asm function: %d, %d, %d \n", X[0], X[1], X[2]); InitXa (X, N, V); printf("After calling asm function: %d, %d, %d \n", X[0], X[1], X[2]); PS - 我建议你阅读这本书: http : //www.amazon.c ...
  • 是的,您可以使用gcc编译您的asm代码。 使用-c进行编译,如下所示: gcc -c file.S -o file.o 这将给出名为file.o.的目标代码文件。 调用链接器执行以下命令后执行以下命令: gcc file.o -o file Yes, You can use gcc to compile your asm code. Use -c for compilation like this: gcc -c file.S -o file.o This will give object code ...
  • 这个错误信息表明你调用malloc的时候堆栈不够齐。 amd64的SysV-ABI强制堆栈在函数调用时对齐到16个字节。 在你自己的代码中,通过确保总是将偶数个四字插入堆栈并记住在入口时由于返回地址已经在堆栈上而导致堆栈未对齐8个字节,可以确保这一点。 没有看到你的源代码,很难给出更具体的帮助。 This error message indicates that you called malloc with an insufficiently aligned stack. The SysV-ABI for ...
  • 在x64中,浮点通常使用SSE2指令执行,因为这些通常要快得多。 这里唯一的问题是SSE中没有与fxtract op相同的(这通常意味着FPU版本将作为复合指令实现,因此非常慢)。 因此,在x64上实现C函数可能同样快。 我发现函数有点难以读取,但是从我可以告诉它调用fxtract然后将整数值存储到long double指向的地址。 这意味着long double将在其中具有“部分”未定义的值。 最好我可以告诉上面的代码程序集不应该工作......但是自从我编写任何x87代码以来,它已经很长时间了,所以我可 ...
  • 正如ughoavgfhw所提到的,GCC默认输出AT&T语法,这与您期望的Intel样式语法不同。 但是,此行为是可配置的:您可以请求它输出Intel样式,如下所示: gcc -masm=intel -O3 --omit-frame-pointer -S test1.c 关键参数是-masm=intel 。 使用这个命令行,我得到的程序集输出(为了简洁,省略了一些不必要的行)如下: scheme_entry: mov eax, 42 ret As mentioned by ughoavg ...
  • 这不是一个错误。 这是不正确使用内联汇编的结果。 在包含return语句的情况下,编译器不检查asm语句。 如果在asm块之前已将%rax设置为零,则指令将覆盖该值。 编译器可以在asm块之前自由执行此操作,因为您尚未通知任何寄存器输出,clobbers等。 如果不包含return语句,则不能依赖返回值。 这就是为什么clang(这就是llvm-gcc与Xcode 5.1的关系 - 它不是gcc前端)发出警告的原因 。 gcc-4.8.2似乎适用于OS X - 但由于代码在两种情况下都不正确,所以它只是“运 ...
  • 您实际上是从汇编函数中正确返回值。 -22是mmap2的有效返回值,表示EINVAL。 当您直接从汇编使用系统调用时, 错误通常作为错误的负版本返回 ,例如-EINVAL或-22。 现在,至于为什么会出现错误,这里是mmap2手册页的摘录: EINVAL (Various platforms where the page size is not 4096 bytes.) offset * 4096 is not a multiple of the system page size. ...
  • 如果你只需要32b / 32b => 32bit除法, 让编译器使用div两个输出 ,gcc,clang和icc都可以正常使用,正如你在Godbolt编译器浏览器中看到的那样 : uint32_t q = bn1->dat[i] / bn2->dat[j]; uint32_t m = bn1->dat[i] % bn2->dat[j]; 编译器非常擅长将CSE转换为一个div 。 只要确保你不将除法结果存储在gcc无法证明不会影响余数输入的地方。 例如*m = dat[i] / dat[j]可能重叠(别名 ...
  • 我已经在一个名为PARLANSE的HLL上实现了窃取工作,而不是在x86上实现了。 PARLANSE每天用于以百万行规模构建生产符号并行程序。 通常,您保留了continuation或“child”的寄存器。 考虑一下你的编译器可能在f()中看到一个计算,并在g()中看到相同的计算,并可能将该计算提升到生成之前的点,并将该计算结果放在一个f()和g的寄存器中()在隐含参数中使用。 是的,这假设是一个复杂的编译器,但是如果你使用的是一个不优化的愚蠢的编译器,你为什么要尝试并行加速? 但是,具体而言,如果它理解 ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)