小编Mr *_* AH的帖子

JQuery事件模型并防止重复处理程序

我再次想要使用$("divid").load(...)将包含其自己脚本的页面加载到div中.我面临的问题与事件有关.假设我们从父页面和我们绑定的加载页面("猴子")触发("猴子")并且只是做一个警报("猴子绑定").如果多次调用相同的load方法,则会多次调用bind.现在我可以在绑定之前取消绑定它,或者在绑定之前检查处理程序的数量,然后不绑定它以防止这种情况.这两个选项都不是可伸缩的,如果我以后想要绑定到另一个"子页面"(加载到div中的页面)中的触发器.

我理想的做法是检查我即将添加的处理程序是否已经存在,但我仍然想要使用匿名处理程序...(我想的最后一个请求有点问).目前我有一个解决方法,使用预定义/命名方法,然后在绑定之前检查它.

// Found this on StackOverflow
function getFunctionName(fn)
{
 var rgx = /^function\s+([^\(\s]+)/
 var matches = rgx.exec(fn.toString());
 return matches ? matches[1] : "(anonymous)"
}

function HandlerExists(triggerName, handlerName) {
        exists = false;
        if ($(document).data('events') !== undefined) {
            var event = $(document).data('events')[triggerName];
            if(event !== undefined)
            {
                $.each(event, function(i, handler) {
                    alert(handlerName);
                    if (getFunctionName(handler) == handlerName) {
                        exists = true;
                    }
                });
            }
        }
        return exists;
    }
Run Code Online (Sandbox Code Playgroud)

这是一种非常粗暴的方式,我觉得,但似乎工作.我只是在绑定之前执行以下操作:

if (!HandlerExists("test", "theMethod")) {
    $(document).bind("test", theMethod);
}
Run Code Online (Sandbox Code Playgroud)

有没有人有更优雅的解决方案?例如,有没有办法检查特定的脚本是否已加载?所以我可以使用getScript()在第一次加载时从子页面加载js,然后根本不加载它在后续加载(并且只是触发一个触发器,由他预先存在的js处理).

javascript jquery events triggers bind

33
推荐指数
4
解决办法
4万
查看次数

右移和左移键之间的.net差异

我目前正在开发一个应用程序,根据用户是否按下右移位键或左移位键(RShiftKey,LShiftKey)需要不同的行为,但是当按下其中任何一个键时,我只看到ShiftKey | 转移.

我的键盘有问题吗?(笔记本电脑)我需要一个新的键盘驱动程序/键盘才能发送不同的键命令...

这是一个相当大的问题,因为没有办法测试代码的工作原理(除了单元测试).有没有任何shift/alt/ctrl键的经验?

.net c# keyboard

7
推荐指数
3
解决办法
4728
查看次数

XSLT线路计数器 - 这很难吗?

每次我需要通过使用JScript在XSLT中进行行计数时我都被骗了,但在这种情况下我不能这样做.我只是想在整个输出文件中写出一个行计数器.这个基本示例有一个简单的解决方案

<xsl:for-each select="Records/Record">
   <xsl:value-of select="position()"/>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

输出将是:

1

2

3

4

等等...

但是如果嵌套的foreach的结构更复杂呢:

<xsl:for-each select="Records/Record">
   <xsl:value-of select="position()"/>
   <xsl:for-each select="Records/Record">
       <xsl:value-of select="position()"/>
   </xsl:for-each>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

在这里,内部foreach将重置计数器(所以你得到1,1,2,3,2,1,2,3,1,2等).有谁知道如何输出文件中的位置(即行数)?

xslt

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

idl 中 COM 的 C++ 公开属性“突然”显示为小写

我有这个旧的 C++ COM 组件。我拿了最新的代码库,构建它,发现其中一个属性变成了小写。例如,在预编译的 dll 中,我有一个属性“类型”,但是当从源代码构建时,它被称为“类型”。idl 显示该属性称为“类型”。那么这里可能会发生什么?

c++ com

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

标签 统计

.net ×1

bind ×1

c# ×1

c++ ×1

com ×1

events ×1

javascript ×1

jquery ×1

keyboard ×1

triggers ×1

xslt ×1