jQuery事件处理程序总是以绑定的顺序执行,这可能很烦人.例如:
$('span').click(doStuff1);
$('span').click(doStuff2);
Run Code Online (Sandbox Code Playgroud)
单击跨度将导致doStuff1()
触发,然后doStuff2()
.
在我绑定doStuff2()时,我想在 doStuff1()之前选择绑定它,但似乎没有任何简单的方法来执行此操作.
我想大多数人会说,只需编写如下代码:
$('span').click(function (){
doStuff2();
doStuff1();
});
Run Code Online (Sandbox Code Playgroud)
但这只是一个简单的例子 - 在实践中,这样做并不总是方便.
在某些情况下,您要绑定事件,并且您绑定的对象已经有事件.在这种情况下,您可能只希望在任何其他现有事件之前触发新事件.
那么在jQuery中实现这一目标的最佳方法是什么?
希望有人对此有一个很好的答案:
为什么Chrome(14.0)会在刷新页面时触发文档就绪和窗口加载事件?请注意,我不是在谈论新页面加载时会发生什么,而是在加载之前.请参阅以下代码:
<form name="form1" method="post" action="tmp.aspx?a=1" id="form1">
<script type="text/javascript">
$(document).ready(function () { console.log('document/ready' + new Date()); });
$(window).load(function () { console.log('window/load' + new Date()); });
</script>
<a href="tmp.aspx?a=1">tmp</a>
</form>
Run Code Online (Sandbox Code Playgroud)
当我第一次访问页面时,我在控制台上获得两个输出,一个用于文档/就绪,一个用于窗口/加载.当我刷新页面时,会快速输出两个,并在此之后立即输出两个(从新页面视图).如果我只是单击直接返回到同一页面的链接(tmp.aspx),则不会发生这种情况.
我相信对此有一个很好的解释.
问候!
编辑:在页面刷新之前,对$(document).ready()和$(window).load()进行了额外调用.因此,当我第一次加载页面时,他们的方法被调用一次,然后我点击刷新并且在页面重新加载之前再次调用方法.之后,当页面刚重新加载时,这些方法称为第三次.
javascript jquery google-chrome javascript-events google-chrome-devtools
我正在编写一个我想在iOS应用商店中发布的HTML5应用程序.使用PhoneGap或包装在UIWebView控件中.
我在为应用程序存储数据方面有什么选择,我有点困惑.
是否使用适合在此类应用程序中存储应用程序数据的localStorage,WebSQL或IndexedDB技术?我将存储JSON和XML数据.
请记住,如果用户无意中删除了这些数据,那么他们将失去工作,这显然是我不想发生的.
我知道减轻这种风险的唯一真正方法是将数据同步到"云"或其他在线系统 - 我可以在将来的版本中执行此操作,但现在不能.最初我只想在本地存储数据,如果这是一种合理稳定的做事方式.
根据我的理解,当清除cookie时,浏览器也将清除任何localStorage数据.因此,我可以看到用户意外地执行此操作的规则.
WebSQL看起来很不错 - 用户无法在iOS上无意中删除它.他们实际上必须进入浏览器设置并手动删除数据库.
但是WebSQL的缺点在于,未来我可能不会支持它.
使用IndexedDB,我不清楚何时清除该数据.删除cookie时是否也会删除它,或者Safari设置中的"数据库"选项是否会控制它?
IndexedDB是更好的解决方案,因为它将来会比WebSQL提供更好的支持吗?
还有其他更合适的解决方案我不知道吗?
我在MVC4(RC)应用程序中遇到了一个奇怪的问题.(在.NET 4.0上运行)
我刚刚设置了Elmah来记录异常/错误.
我基本上安装了Elmah.MVC和elmah.sqlserver NuGet包.(分别为2.0.0和1.2版)
它似乎工作正常 - 我可以去elmah页面查看错误:
http://myserver/elmah
例如,如果我创建了一些404错误,它们将出现在此日志中.
不起作用的是:我有一个带有[HttpPost]
动作的标准MVC控制器.我已经设置好了它总是会抛出一个异常:
public class TestController : Controller
{
[HttpPost]
[ValidateInput(false)]
public void Testing()
{
throw new Exception("uh oh");
}
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试通过jQuery将数据发布到此控制器:
$.post('/Test/Testing', {test_data: 'This is some test data'});
Run Code Online (Sandbox Code Playgroud)
好的,这很有效.响应返回死亡的典型黄色屏幕,并且错误被捕获并记录在Elmah中.
但是,如果我尝试发布类似XML/HTML的内容,则Elmah中不会记录错误.我仍然从服务器后面得到相同的响应(死亡的黄色屏幕),但在Elmah中没有任何内容.
$.post('/Test/Testing', {test_data: '<test><test1>This is some test data</test1></test>'});
Run Code Online (Sandbox Code Playgroud)
为什么?这没有意义.
请注意,我已经关闭了操作的请求验证.如果我不这样做,那么发布XML/HTML数据会导致此异常:
从客户端检测到潜在危险的Request.Form值
NuGet也会拒绝记录该异常 - 我认为这是一个错误:
http://code.google.com/p/elmah/issues/detail?id=217
那么我遇到的这个问题的原因是什么?它是一个与我上面发现的问题相关的错误?
我只是因为请求包含XML/HTML而无法记录异常,这似乎是一个非常不幸的情况.
当然有办法解决这个问题吗?
我使用谷歌地图javascript V3 API来显示地图.但我对地图气泡有问题.当气泡中的信息超过特定高度时,它会将滚动条插入气泡中.
如何删除这些滚动条并根据其内容为气泡指定动态宽度和高度?
或者我如何设计我自己的自定义气泡,使其根据内容的宽度和高度动态?
提前致谢.
我是原生iOS开发的新手,并且一直在玩本地化的故事板.
我通过更新故事板的文件来本地化我的故事板中的文本UILabel
和UIButton
对象Main.strings
:
// UIButton:
"cEx-Yi-RY8.normalTitle" = "Done";
// UILabel:
"1l2-H9-hRc.text" = "Safety information!";
Run Code Online (Sandbox Code Playgroud)
我怎么做同样的UITabBarItem
?我试过了:
//UITabBarItem:
"oSH-y1-hFoB.title" = "Scan";
Run Code Online (Sandbox Code Playgroud)
但它不起作用:(
我不明白为什么......我可以看到可以在UITabBarController中手动更新文本:
- (void)viewDidLoad
{
//...
item.title = NSLocalizedString(@"scan", nil);
}
Run Code Online (Sandbox Code Playgroud)
但后来我必须将这些翻译放在一个单独的Localizable.strings
文件中,这似乎很蹩脚.
另一方面,至少翻译Localizable.strings
有些可读,"scan" = "Scan";
而不是"oSH-y1-hFoB.title" = "Scan";
......
仍然......我没有关注为什么有些东西在Interface Builder中工作,但其他东西没有,你必须手动完成.
我讨厌必须添加所有这些样板代码来做重复的事情,比如在UI中本地化文本,当框架应该只能为我做.(如果它可以为UIButton做,为什么不是UITabBarItem ...)
或者我只是忽略了什么?
我对DataContractSerializer的行为感到困惑.我们的配置基于XML.XML用作DataContractSerializer.ReadObject方法的源.最近,当没有设置反序列化对象的某些属性时,我遇到了一个问题.我已跟踪更改并发现这些属性已手动添加到XML中.在我看来哪个好.显然,在DataContractSerializer看来它不行,因为它似乎期望XML节点按字母顺序排序.真?!反序列化似乎非常简单 - 按顺序读取XML,解析节点名称,设置相应的属性.订购的目的是什么?
有解决方法吗?也许是DataContractSerializer的某种设置?
根据我的看法,如果您正在构建OSX桌面HTML5应用程序并希望localStorage在WebView包装器中持久存在,则需要执行以下操作:
WebPreferences* prefs = [webView preferences];
[prefs _setLocalStorageDatabasePath:@"~/Library/Application Support/MyApp"];
[prefs setLocalStorageEnabled:YES];
Run Code Online (Sandbox Code Playgroud)
但在Xcode 4.3中,这似乎对我没有用.相反,我得到了
"No visible @interface for 'WebPreferences' declares the selector '_setLocalStorageDatabasePath:'
"No visible @interface for 'WebPreferences' declares the selector 'setLocalStorageEnabled:'
Run Code Online (Sandbox Code Playgroud)
我对Objective C很新,并且可能正在做一些愚蠢的事情,比如不包括一些标题或其他东西.
我已经包含了WebKit框架和这两个标头:
#import <WebKit/WebKit.h>
#import <WebKit/WebPreferences.h>
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我可以访问其他prefs方法,即[prefs setDefaultFontSize:10]
- 但不是我列出的上述两种方法.
有任何想法吗?这是Xcode 4.3中删除的内容吗?
我刚刚开始通过puttycyg在cygwin下运行Vim.我觉得这比windows下的gVim要好得多;)
无论如何,fugitive.vim插件导致Vim需要15-20秒才能启动.Vim启动后,一切看起来都很正常.从那时起我可以正常使用fugitive.vim.
造成这种缓慢的原因是什么?与cygwin有关我敢打赌......有什么想法吗?
我不明白为什么unicode不能在我的MinTTY终端中工作.我使用的是Windows XP
我有Cygwin v1.7.10和MinTTY v1.0.3.我也使用zsh shell(通过"oh-my-zsh")
我在MinTTY设置对话框中将local设置为"en_US"并将字符设置为"UTF-8".
当我在MinTTY终端时,这是以下环境变量的输出:
echo $LC_ALL
*nothing*
echo $LC_CTYPE
en_US.UTF-8
echo $LANG
en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
然而,当我用unicode查看文件时,我看不到符号.同样,"oh-my-zsh"的默认提示使用unicode,但也无效.
有谁知道什么可能是错的?
任何人都可以确认unicode在类似的设置上工作吗?
cygwin ×2
ios ×2
jquery ×2
objective-c ×2
asp.net-mvc ×1
c# ×1
elmah ×1
google-maps ×1
height ×1
html5 ×1
indexeddb ×1
javascript ×1
localization ×1
macos ×1
mintty ×1
popup ×1
puttycyg ×1
uistoryboard ×1
unicode ×1
vim ×1
vim-fugitive ×1
wcf ×1
web-sql ×1
webkit ×1
windows ×1
windows-xp ×1
xcode4.3 ×1
xml ×1
zsh ×1