我再次想要使用$("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处理).
我目前正在开发一个应用程序,根据用户是否按下右移位键或左移位键(RShiftKey,LShiftKey)需要不同的行为,但是当按下其中任何一个键时,我只看到ShiftKey | 转移.
我的键盘有问题吗?(笔记本电脑)我需要一个新的键盘驱动程序/键盘才能发送不同的键命令...
这是一个相当大的问题,因为没有办法测试代码的工作原理(除了单元测试).有没有任何shift/alt/ctrl键的经验?
每次我需要通过使用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等).有谁知道如何输出文件中的位置(即行数)?
我有这个旧的 C++ COM 组件。我拿了最新的代码库,构建它,发现其中一个属性变成了小写。例如,在预编译的 dll 中,我有一个属性“类型”,但是当从源代码构建时,它被称为“类型”。idl 显示该属性称为“类型”。那么这里可能会发生什么?