我按下了一个表单提交,其中我正在显示一个带有旋转轮的小jQuery对话框.当我按下escape时,对话框关闭,这会中断我的表单提交.用户按ESC键时如何克服.当为jQuery对话框按下ESC键时,如何防止用户退出?
我正在尝试创建一个javascript错误日志记录基础结构.
我试图设置window.onerror为我的错误处理程序.它适用于IE 6,但是当我在Firefox中运行它时,它会遇到一些冲突的onerror方法.
var debug = true;
MySite.Namespace.ErrorLogger.prototype = {
//My error handling function.
//If it's not in debug mode, I should get an alert telling me the error.
//If it is, give a different alert, and let the browser handle the error.
onError: function(msg, url, lineNo) {
alert('onError: ' + msg);
if (!debug) {
alert('not debug mode');
return true;
}
else {
alert(msg);
return false;
}
}
}
//Document ready handler (jQuery shorthand)
$(function() { …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序是一半GWT和一半Backbone.js.我们正在将应用程序从GWT过渡到Backbone,因此当我们添加新组件时,它们就在Backbone中.我们也用Backbone替换了一些现有的组件.
我试图替换的组件仍然需要能够让其GWT容器知道何时发生某些事件,以便容器可以影响其他GWT组件.我在GWT中有一个本机函数,它引用一个在Javascript中定义函数的全局命名空间.该函数呈现Backbone组件,因此GWT没有对组件本身的引用.
我尝试在GWT中定义一个自定义DOM事件,然后从Backbone代码触发该事件,但要么我做错了,要么就是不这样做.
我在创建自定义事件时引用了这些问题:如何将CSS AnimationEnd事件处理程序添加到GWT窗口小部件?&GWT自定义活动
我做了两次尝试从Backbone触发自定义事件并让GWT听取它,但都没有工作.
我需要帮助从Javascript(Backbone.js)触发一个事件(或调用一个回调或类似的东西),这些事件将在GWT中被"听到"(或被叫或其他).
码
两次尝试之间共同的代码是如何呈现Backbone组件以及如何触发事件:
从课堂上BackboneController.java:
public static void loadMessageEntry(final String selector, final String type, final QuipuId conversationID, final QuipuId messageID, final boolean enterIsSubmit) {
String messageIDString = messageID.getId();
String enterRole = enterIsSubmit ? "submit" : "newline";
if(messageID.equals(QuipuId.NULL)) {
messageIDString = "";
}
showMessageEntry(selector, type, conversationID.getId(), messageIDString, enterRole);
}
private static native void showMessageEntry(String selector, String type, String messageId, String conversationId, String enterRole) /*-{
var intervalTimer = $wnd.setInterval(function() {
if($wnd.Namespace.MessageEntry) { …Run Code Online (Sandbox Code Playgroud) 我试图在实例完全加载后将我的CKEditor实例设置为"readOnly",但是我收到了一个Javascript错误:Cannot call method 'setReadOnly' of null.当我深入研究它时,错误来自ckeditor.js中的这一行,在editor.setReadOnly方法中:this.editable().setReadOnly(a);这意味着编辑器存在,但editable方法/属性(在CKEditor实例上)却没有.
下面是我的代码,我会稍微解释一下.我的应用程序是GWT和Backbone的组合.CKEditor本身是由Backbone代码创建的,但父元素是在GWT中,所以我在那里发起了setEnabled动作.
private native void setEnabledOnLoad(boolean enabled, String id) /*-{
CKEDITOR.on("instanceReady", function(evt) {
if(evt.editor.name === id) {
Namespace.trigger(Namespace.Events.SET_ENABLED, enabled);
}
});
}-*/;
setEnabled: function(enabled) {
this.editor.setReadOnly(!enabled);
if(enabled){
this.editor.focusManager.focus();
} else {
this.editor.focusManager.blur();
}
}
Run Code Online (Sandbox Code Playgroud)
Backbone类具有Namespace.Events.SET_ENABLED该触发器的侦听器setEnabled.
我应该听听另一个CKEditor事件吗?似乎没有instanceReady事件editable.我错过了什么?
EDIT
this.editor是在Backbone类render函数中创建的,如下所示:
this.editor = CKEDITOR.replace(this.$(this.id)[0], config);
Run Code Online (Sandbox Code Playgroud)
我instanceReady在创建之后不立即添加侦听器的原因是因为setEnabledOnLoad在实例完全初始化之前在GWT中调用了该函数.这是将代码放在两个地方的结果.GWT已经说"好了,创建了实例",但是当GWT进入下一行代码并希望将其设置为启用/禁用时,Backbone还没有完成.
我正在尝试使用ASP.NET页面测试Web服务调用,该页面创建一个包含用户名和密码字段以及"提交"按钮的表单.(我正在使用的jQuery和.js文件都包含在head元素的脚本标记中.)
"提交"按钮调用在C#代码隐藏文件中创建的函数,该函数调用单独的JavaScript文件.
protected void mSubmit_Click(object sender, EventArgs eventArgs)
{
String authenticate = String.Format("Authentication(\"{0}\",\"{1}\");", this.mUsername.Text,this.mPassword.Text);
Page.ClientScript.RegisterStartupScript(this.GetType(), "ClientScript", authenticate, true);
}
Run Code Online (Sandbox Code Playgroud)
JavaScript函数Authenticate使用jQuery和Ajax对不同的服务器进行Web服务调用,发送JSON参数并期望返回JSON作为响应.
function Authentication(uname, pwd) {
//gets search parameters and puts them in json format
var params = '{"Header":{"AuthToken":null,"ProductID":"NOR","SessToken":null,"Version":1},"ReturnAuthentication":true,"Password":"' + pwd + '","Username":"' + uname + '",”ReturnCredentials”:false }';
var xmlhttp = $.ajax({
async: false,
type: "POST",
url: 'https://myHost.com/V1/Identity/Authenticate',
data: params,
contentType: 'application/json'
});
alert(xmlhttp.statusText);
alert(xmlhttp.responseText);
return;
}
Run Code Online (Sandbox Code Playgroud)
但是,因为我正在调用的Web服务与ASP.NET,C#和JavaScript文件位于不同的服务器上,所以我没有得到statusText或responseText警告.
不知何故,没有任何东西被发送到Web服务,我没有得到任何回报,甚至没有错误.我尝试在beforeSend属性中添加一个函数,但是没有触发.我需要一种特殊的方式来处理调用服务器外的Web服务吗?
UPDATE!
在jjnguy,Janie和Nathan的建议下,我现在正在尝试使用HttpWebRequest对Web服务进行服务器端调用.使用jjnguy的一些代码以及这个问题的代码,我想出了这个.
public …Run Code Online (Sandbox Code Playgroud) 我试图在我的应用程序中捕获某些keydown事件,但前提是同时没有按下"控制"键.我不想遇到屏幕阅读器键盘快捷方式的问题.Shift,Ctrl并且Alt很容易检查因为它们是在javascript事件上,但我还需要检查Ins和Windows键以及任何Mac控制键.
这是我这么远,它工作正常,但是当仍然触发了我的事件Ins或Windows按住.
handleKeydown: function(event) {
var comboKeyPressed = event.ctrlKey || event.shiftKey || event.altKey;
if(!comboKeyPressed && event.keyCode === $.ui.keyCode.HOME) {
event.preventDefault();
this.$('>ul>li:last').attr('tabindex', -1);
this.$('>ul>li:first').attr('tabindex', 0).focus();
} else if (!comboKeyPressed && event.keyCode === $.ui.keyCode.END) {
event.preventDefault();
this.$('>ul>li:first').attr('tabindex', -1);
this.$('>ul>li:last').attr('tabindex', 0).focus();
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法轻松检查其他控制键,或者我是否需要捕获这些事件并在某些全局布尔值中保留它们this.isInsertPressed?
我的jVectorMap没有采用我在包含div上提供的新高度,只在默认(?)高度为54px时呈现.
这是在我的scripts.js文件中的document.ready函数中:
$('#team-map-usa').vectorMap({
map: 'us_lcc_en',
backgroundColor: '#ffffff',
hoverColor: '#999999',
color: '#dddddd',
normalizeFunction: 'polynomial',
values: myData,
scaleColors: ['#d0c4dc', '#d1b0eb', '#b296cb', '#47006b'],
onLabelShow: function(event, label, code) {
label.text(code);
})
});
Run Code Online (Sandbox Code Playgroud)
包含div:
<section id="top">
<div id="team-map-usa" style="width: 600px; height: 400px;"></div>
</section>
Run Code Online (Sandbox Code Playgroud)
文档建议如果我在包含div上设置了宽度和高度,那么应该将其应用于创建的jVectorMap.div不会隐藏在任何一点(我在这里读到:Jvectormap非常小的div更改可能是一个问题)并且$('#team-map-usa')clientHeight和clientWidth都是在初始化vectormap时定义的.
这是我第一次使用jVectorMap,我必须遗漏一些东西.有关如何使地图显示正确尺寸的任何建议?
$(function () {
$('#save').click(function() {
$('#save').attr('disabled', 'disabled');
console.log($(document.activeElement).attr('id'));
});
$('#test').focus();
console.log($(document.activeElement).attr('id'));
});Run Code Online (Sandbox Code Playgroud)
button:focus {
outline: 1px dotted #000000;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<body id="body">
<button id="discard" disabled="disabled">Discard</button>
<button id="save">Save</button>
</body>Run Code Online (Sandbox Code Playgroud)
我有一个Discard Changes按钮,单击时,用户会看到一个确认对话框,其中显示“您确定要放弃更改吗?”。当他们单击 时OK,我们关闭对话框并希望将焦点放回到Discard Changes按钮上,但我们现在已禁用它,因为没有要丢弃的更改。当我检查该document.activeElement值时,它不是禁用的按钮,而是主体元素。但是,当用户单击该Save按钮时,由于他们在物理上将焦点设置在该元素上,因此它会获得焦点,因此即使在禁用该按钮后,它仍然具有焦点。由于某种原因,在代码片段中,我没有看到在禁用的“保存”按钮上设置的焦点样式,即使在我的应用程序中我确实看到了它。
是否可以使用 jQuery 将焦点设置在禁用的按钮上?如果没有,为什么不呢?如果是这样,我做错了什么?
我试图将方法作为参数传递给另一个类中的方法。该方法在第一类中定义,而另一类的方法是静态的。看到它会更容易理解:
public class MyClass extends ParentClass {
public MyClass() {
super(new ClickHandler() {
public void onClick(ClickEvent event) {
try {
OtherClass.responseMethod(MyClass.class.getMethod("myMethod",Boolean.class));
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public void myMethod(Boolean success) {
if(success.booleanValue()) {
//do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试构建时,出现以下错误:
The method getMethod(String, Class<boolean>) is undefined for the type Class<MyClass>
Run Code Online (Sandbox Code Playgroud)
问题不是没有找到myMethod,没有找到Class<MyClass>.getMethod,我也不知道为什么。
我们已经重新编写了这部分代码,并且没有使用'getMethod orgetDeclaredMethod ' 。由于npe在我所做的事情中发现了两个问题,并且在寻找答案上付出了很多努力,因此我接受了这个答案。
我有一个网页,我在按钮上使用unicode向下三角形表示选择这些按钮将显示下拉列表.
我这样在css中添加三角形:
.icon:after {
content:"?";
}
.icon {
width:12px;
height:12px;
margin: 3px;
display: inline-block;
cursor:default;
}
Run Code Online (Sandbox Code Playgroud)
页面中的元标记是:
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; chrome=1" >
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
Run Code Online (Sandbox Code Playgroud)
但是,三角形不显示为三角形,它们显示如下: 
知道为什么它可能会像这样出现以及如何修复它?
我正在尝试使用三个背景图像制作一个按钮,以便我们可以为按钮的文本提取翻译并进行良好的扩展.我们可能会为IE8添加基本样式,但我们的设计师希望我们使用这种样式,我们无法使用纯CSS3重新创建它.
这是图像:

这是HTML(只是一个简单的按钮,但我想我应该把它放在一边:
<button class="back clickable" aria-label="Back" onclick="javascript:history.back();">Back</button>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几件事; 我将粘贴两次尝试的CSS.
尝试1:使用伪选择器
http://jsfiddle.net/c2B6X/
.back {
background: url("images/back-middle.png") 14px 0 repeat-x;
color: $white;
height: 28px;
padding: 5px;
&:before {
background: url("images/back-front.png") 0 0 no-repeat;
width: 14px;
}
&:after {
background: url("images/back-end.png") 100% 0 no-repeat;
width: 8px;
}
}
Run Code Online (Sandbox Code Playgroud)
尝试2:三background-images
http://jsfiddle.net/nPUQN/
.back {
background: none;
background-image: url("images/back-middle.png"), url("images/back-end.png"), url("images/back-front.png");
background-position: 14px 0, 100% 0, 0 0;
background-repeat: repeat-x, no-repeat, no-repeat;
border-right: 8px transparent;
border-left: 14px transparent;
color: $white;
height: 28px;
padding: …Run Code Online (Sandbox Code Playgroud)