我的具体用例是我有一个所见即所得编辑器,它基本上是一个可编辑的 iframe。然而,对于用户来说,它看起来像一个标准的文本区域。我的问题是,我在(感知的)选项卡索引中的该编辑器之前和之后有输入,我希望用户能够按选项卡(或他选择的平台上的等效键)进入所见即所得编辑器当他位于前一个元素时,使用 Shift-Tab 可以在后一个元素中访问该元素。
我知道这可以使用按键事件并检查是否按下 Tab 键来伪造,但我很好奇是否有更好的方法。
更新。Treeface在评论中澄清了实际问题。
问题:
在正常情况下,您可以使用元素TABINDEX的“ ”属性<input>来控制,当跳出“主题”输入字段(以电子邮件形式)时,焦点落在电子邮件中的“正文”输入字段上。只需将正确排序的值分配给两个输入字段的“TABINDEX”属性即可完成此操作。
问题是 TABINDEX 属性仅对同一框架内的元素进行排序。因此,如果“正文”输入字段实际上位于内部IFRAME,则无法使用 TABINDEX 顺序从父框架中的“主题”直接跳到 IFRAME 中的“正文”。
就像在 Facebook 上输入评论并点击@用户名一样,它会对此做出反应,让您选择内联的用户名。
使用 jQuery,如何为 [text:1] 连接事件侦听器。[text:我希望当用户输入文本字段时触发一个事件。
对了,这很奇怪。我已经进行了大量的谷歌搜索,发现了数百篇文章似乎为我指明了正确的方向,但似乎没有一篇起作用。
这是我正在尝试做的事情的最新体现:
父页面
<html>
<head>
<script>
$('#mainWindow').ready(function () {
$('#mainWindow').contents().find('#clickThis').live('click', function () {
alert('Click detected!');
});
});
</script>
</head>
<body>
<iframe id="mainWindow" name="mainWindow" src="myMainPage.aspx" style="border: 0; position:fixed; top:0; left:0; right:0; bottom:0; width:100%; height:100%"></iframe>
<iframe src="myOtherPage.aspx"></iframe>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
带框架的页面(位于主窗口中)
<html>
' LOADS OF STUFF INCLUDING:
<li id="clickThis">Click This</li>
</html>
Run Code Online (Sandbox Code Playgroud)
显然,我在这里尝试做的是当用户单击子框架中的按钮时在父页面中运行一些代码。
它需要工作live,因此如果框架中的页面发生更改,它仍然会被父级捕获(该元素存在于将加载到框架中的所有页面上)
我已经能够在各种其他搜索之后跨 iFrame 运行代码,从父级到 iFrame 以及从 iFrame 到 iFrame,但从 iFrame 运行到父级会导致问题。
上面的代码没有任何作用,我尝试过的任何其他选项也没有任何作用!
*编辑应该添加,所有文件都在同一台服务器上,跨域问题不是问题
在 Javascript 中,如何附加事件处理程序以便它在默认操作后运行?
<form target="_blank" action="submit.php" onsubmit="doThisAfterSubmit()">
<input type="submit" onclick="doThisAfterSubmit()" />
</form>
Run Code Online (Sandbox Code Playgroud)
类似但不充分的 Stack Overflow 问题:
javascript:可以添加在默认行为之后运行的事件处理程序吗?
我已阅读这些内容,但它们正在处理通过使用诸如keyupover之类的变体来解决的击键事件keypress。我见过的唯一其他解决方案是该setTimeout()方法。我想避免使用setTimeout()更优雅的解决方案(如果存在)。
我的用例是我想在提交后从 DOM 中删除表单。
如果当前 url 和弹出 url 位于同一域中,我可以使用以下代码检测弹出窗口中的用户单击事件:
var myWindow = window.open("abc.html","MsgWindow", "width=500","height=600");
$(myWindow).on('click', 'a', function() {alert('a')});
Run Code Online (Sandbox Code Playgroud)
但是,是否可以从外部 url 检测用户活动,如下所示?
var myWindow = window.open("http://google.com","MsgWindow", "width=500","height=600");
$(myWindow).on('click', 'a', function() {alert('a')});
Run Code Online (Sandbox Code Playgroud)
第二个片段对我不起作用。我怎样才能让它发挥作用?
如何暂时禁用onclick活动直到活动结束?
到目前为止,这就是我想出的全部:
<script>
function foStuff(a){
//no modifications here to be done, just some code going on
}
$(document).ready(function(){
$("#btn").click(function(){
var obj = $(this);
var action = obj.prop('onclick');
obj.prop('onclick','');
whenDoStuffFinishes.(function(){ //when do stuff finishes is what i need to get
obj.prop('onclick',action);
});
});
});
</script>
<div id="btn" onclick="doStuff(500)">
</div>
Run Code Online (Sandbox Code Playgroud)
编辑:我已经尝试过这种方式:但它并没有解锁点击事件
$("#btn").click(function(){
var obj = $(this);
obj.off('click');
$.when( doStuff(500) ).then( function(){
obj.on('click'); // it actually comes here, but click event is being unset
} );
});
<script>
$(document).ready(function(){});
</script>
<div …Run Code Online (Sandbox Code Playgroud) 我得到奇怪的行为,其中我试图分派的 Javascript 事件没有被解释为事件,而当我检查它是Event.
然后它失败并出现以下错误:
未捕获的 InvalidStateError:无法在“EventTarget”上执行“dispatchEvent”:提供的事件为空。
我一定在这里遗漏了一些明显的东西。
$(function () {
$("[type='tel']").keydown(function (event) {
var position = this.selectionStart;
var $this = $(this);
var val = $this.val();
if (position == this.selectionEnd &&
((event.keyCode == 8 && val.charAt(position - 1) == "," && val.substr(0, position - 1).indexOf(".") == -1)
|| (event.keyCode == 46 && val.charAt(position) == "," && val.substr(0, position).indexOf(".") == -1))) {
event.preventDefault();
if (event.keyCode == 8) {
$this.val(val.substr(0, position - 2) + val.substr(position));
position = position - 2; …Run Code Online (Sandbox Code Playgroud)我试图检测焦点事件是否由用户(手动)触发。当涉及到click事件时,可以检查event.originalEvent处理程序方法中是否存在:
typeof event.originalEvent != "undefined"
Run Code Online (Sandbox Code Playgroud)
不幸的是,它对于焦点事件的行为不同。请检查示例。
尝试点击第一个<input>,然后点击第二个输入的“触发点击”按钮,你会看到click undefined,这意味着event.originalEvent不存在。然后尝试点击第一个,<input>然后点击第二个输入的“触发焦点”按钮,你会看到focus object,event.originalEvent这次出现了。
我在我的应用程序中使用Django Autocomplete Light (DAL)。
为了在用户选择的后台进行一些后处理,我尝试.on('change')使用 jQuery捕获事件(当 DAL 选择字段选择更改时)(就像我们在输入字段或 Django 选择字段等对象上所做的那样)。 )。但是,我无法捕获该事件。
例如以下代码(已编辑):
$(document).on('change', '#x_select_item', function() {
console.log('Selection on x_select_item changed');
});
Run Code Online (Sandbox Code Playgroud)
是不产生的任何消息。
编辑
以下用于捕获的代码.on('focus)正在运行:
$(document).on("focus", '#x_select_item', function() {
console.log('THIS IS FIELD x_select_item for on Focus Event');
});
Run Code Online (Sandbox Code Playgroud)
寻找 DAL 事件也没有多大帮助,只是它需要一个到“select2”事件页面。列出的事件包括“change”和“change.select2”,但使用这两个(如上例所示)不会在控制台中产生任何反应。
是否可以通过某种方式在DAL上捕获选择更改事件?
javascript django jquery django-autocomplete-light jquery-events
在我的程序中,如果用户试图离开页面,他将收到一个对话框,询问他是否确定要离开.
如果用户选择不离开页面,我该如何实施'取消'选项?
来源javascript代码:
$(window).unload(function(){
var c= confirm ("Are you sure?");
if (c){
alert("Thanks. Good luck!");
}
else{
????
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢.
javascript ×10
jquery ×10
jquery-events ×10
events ×2
click ×1
django ×1
iframe ×1
onclick ×1
xss ×1