小编Dej*_*eji的帖子

JQuery .on('keydown',...)没有触发新元素

我查看了一些相关问题,但没有人帮助我弄清楚我的问题.

我有自己的动态数据网格形式从头开始构建,其中可以添加/删除数据行和字段列.我正在尝试提高可用性,以便按Enter键将创建一个新的字段列并将焦点放在它.到目前为止,这是执行此操作的代码:

$('#data_fields').on('keydown','._field',function(e){
    if(e.which==13)
    {
        $('#addfield').click();
        var o=$(this).parent().parent();
        var l=$(o).children().length-2;
        var f=$(o).find("td:eq("+l+")").find("._field");
        $(f).focus();
    }
});
Run Code Online (Sandbox Code Playgroud)

#addfield 是一个按钮,在单击时添加字段列.

._field 是一个输入框,其中写入了字段的名称.

#data_fields是包含单元格的tr,其中包含._field输入框.

但是,._field新列中的输入框没有特殊的超级元素keydown能力.更重要的是,如果我将('#data_fields')选择器更改为.on()to (document),它甚至不会为当前元素提供keydown回调.

这是HTML,抱歉它有点乱,但我在PHP中使用模板和东西:

<thead id="doc_fields">
  <tr id="delrow">
  <tr id="data_fields">
    <td style="padding:2px"><input class="_field" type="text" onkeyup="sync_doc_table();" onchange="sync_doc_table();" style="width:90%" value="" name="Fields[]"></td>
    <td style="padding:2px"><input class="_field" type="text" onkeyup="sync_doc_table();" onchange="sync_doc_table();" style="width:90%" value="b" name="Fields[]"></td>
    <td style="padding:2px"><input type="text" style="width:90%" value="" name="Fields[]" onchange="sync_doc_table();"></td>
    <td style="padding:2px"><input type="text" style="width:90%" value="" name="Fields[]" onchange="sync_doc_table();"></td>
    <td id="addcol" class="midi" style="width:25px" rowspan="3">
      <a id="addfield" onclick="inscol('#addcol','<td style=\'padding:2px\'><input …
Run Code Online (Sandbox Code Playgroud)

jquery

10
推荐指数
1
解决办法
3万
查看次数

VirtualAlloc 困惑 - 它仅适用于页面吗?

我需要使用 VirtualAlloc 为我的项目分配可执行内存,以便 JIT 将自定义脚本格式重新编译为 x86/etc。但我感到困惑的是,其他人似乎都没有注意到,而且它的行为似乎明显缺乏细节。

我知道它分配“虚拟”内存,这意味着它可以是任何物理内存(RAM/磁盘),但在使用时它可以简单地被视为“内存”。但是,例如,如果我做了类似的事情:

#define MB 1024*1024
auto pAddr = VirtualAlloc(NULL, 8*MB, MEM_RESERVE, PAGE_NOACCESS);
VirtualAlloc(pAddr + 4*MB, 1*MB, MEM_COMMIT, PAGE_EXECUTE_READWRITE);  // commit 1MB, 4MB's into the reserved memory
Run Code Online (Sandbox Code Playgroud)

是只使用了 1MB,还是 5MB?显然,我并不期望它是 5MB - 我只是不知道在这个看似显而易见的场景中会发生什么。有效吗?保留内存中的任何范围都可以自由提交和取消提交吗?更重要的是,它可以无序使用还是应该增量分配(根据 MSDN 文档,这就是您可以用它做的所有事情)。或者 VirtualAlloc 只对一次分配“页面”感到满意?

我发现的每个示例似乎只是对向我展示如何分配页面感兴趣 - 这可能只是最基本的用途,但远非最实用 - 但我想用它来为可以重新编译的脚本分配已编译的代码执行过程中偶尔会出现。我需要尝试为这些分配创建某种接口,这样我就可以简单地说“给这个脚本编译一些内存”,它将自动返回以前提交的未使用的空间或提交一些新的空间 - 所以关于的任何提示如何最好地从虚拟内存进行分配(例如,最好不要取消提交可能会再次提交的内存?)也将受到赞赏。

c++ memory windows memory-management

3
推荐指数
1
解决办法
3163
查看次数

如何破坏通过'Placement New'构造的无析构函数类型

所以我构建了一个类,我打算用它std::aligned_storage来存储最多16个字节的不同类型的'Variant'类.从理论上讲,它应该能够存储任何POD类型和常见的容器,如std::stringstd::map.

我按照这里找到的代码示例进行了操作,看起来它的确是为了我正在寻找的内容:http://en.cppreference.com/w/cpp/types/aligned_storage

我的版本,基本上:

class Variant {
public:
    Variant() { /* construct */ }
    Variant(std::map<int,int> v) {
        new(&m_data) std::map<int,int>(v);  // construct std::map<int,int> at &m_data
        m_type = TYPE_MAP;
    }
    ~Variant() {
        if (m_type == TYPE_MAP) {
            // cool, now destruct..?
            reinterpret_cast<std::map<int, int>*>(&m_data)->~/*???????????????*/();
        }
    }

private:
    // type of object in m_data
    enum Type m_type;
    // chunk of space for allocating to
    std::aligned_storage<16, std::alignment_of<std::max_align_t>::value>::type m_data;
};
Run Code Online (Sandbox Code Playgroud)

我的问题伴随着破坏.正如你所看到的/*???????????????*/,我不知道~T()在cppreference.com示例中代替什么代码:

reinterpret_cast<const T*>(data+pos)->~T();  // …
Run Code Online (Sandbox Code Playgroud)

c++ stl c++11

2
推荐指数
1
解决办法
96
查看次数

标签 统计

c++ ×2

c++11 ×1

jquery ×1

memory ×1

memory-management ×1

stl ×1

windows ×1