我的具体用例是我有一个所见即所得编辑器,它基本上是一个可编辑的 iframe。然而,对于用户来说,它看起来像一个标准的文本区域。我的问题是,我在(感知的)选项卡索引中的该编辑器之前和之后有输入,我希望用户能够按选项卡(或他选择的平台上的等效键)进入所见即所得编辑器当他位于前一个元素时,使用 Shift-Tab 可以在后一个元素中访问该元素。
我知道这可以使用按键事件并检查是否按下 Tab 键来伪造,但我很好奇是否有更好的方法。
更新。Treeface在评论中澄清了实际问题。
问题:
在正常情况下,您可以使用元素TABINDEX的“ ”属性<input>来控制,当跳出“主题”输入字段(以电子邮件形式)时,焦点落在电子邮件中的“正文”输入字段上。只需将正确排序的值分配给两个输入字段的“TABINDEX”属性即可完成此操作。
问题是 TABINDEX 属性仅对同一框架内的元素进行排序。因此,如果“正文”输入字段实际上位于内部IFRAME,则无法使用 TABINDEX 顺序从父框架中的“主题”直接跳到 IFRAME 中的“正文”。
就像在 Facebook 上输入评论并点击@用户名一样,它会对此做出反应,让您选择内联的用户名。
使用 jQuery,如何为 [text:1] 连接事件侦听器。[text:我希望当用户输入文本字段时触发一个事件。
我的 body 标签中有 data-segment 属性,该属性由滑块更改。我需要根据 this 的值触发一个函数,当它改变时。
我不确定在这种情况下如何附加事件侦听器?
对了,这很奇怪。我已经进行了大量的谷歌搜索,发现了数百篇文章似乎为我指明了正确的方向,但似乎没有一篇起作用。
这是我正在尝试做的事情的最新体现:
父页面
<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 中删除表单。
我被迫使用从外部服务器加载的脚本。
该脚本基本上添加了一个元素<div class="myClass">并click为其绑定了一个方法。
问题是,在与click元素关联的函数中,它们最后有一个return false语句。
我也有自己的脚本,我正在尝试click使用$(document).on('click', '.myClass', function() { ... })
我的问题是他们的事件是之前触发的,而return false他们的函数中的 没有触发我自己的click方法。
我试过在他们之前加载我的脚本,但这并没有解决问题。我已经阅读了关于解除绑定然后重新绑定的内容,但我不确定这是一个不错的选择,因为他们的代码可以随时更改。
还有什么我可以尝试的吗?
我正在尝试mousemove使用 jQuery手动触发事件。演示在这个小提琴http://jsfiddle.net/qJJQW/
从 Stack Overflow 上的其他类似帖子来看,这似乎应该有效。为什么不是?
如果当前 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)
第二个片段对我不起作用。我怎样才能让它发挥作用?
我得到奇怪的行为,其中我试图分派的 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这次出现了。
jquery ×10
jquery-events ×10
javascript ×9
events ×2
click ×1
html ×1
iframe ×1
mousemove ×1
xss ×1