- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
jQuery“.triggerHandler()”机制与“.trigger()”不同,它只对调用它的 jQuery 对象引用的第一个元素进行操作。换句话说,
$('.all-over-the-page').triggerHandler("readjust");
只会为第一个具有“all-over-the-page”类的元素调用“重新调整”处理程序,即使页面上有许多具有该类的元素。另一方面,“.trigger()”方法会影响所有这些。
我意识到我可以使用“.each()”来解决这个问题(或者简单地编写我自己的替代品来为我做这件事),但是是否有一些理由可以解释为什么两者在这方面不同?这对我来说毫无意义。 (我当然明白,现在几乎肯定不能更改。)
编辑以澄清:
如果我以我实际获得的代码风格提供上下文,可能会更容易理解我为何为此绞尽脑汁。当我在一个页面上将各种“小部件”功能的代码放在一起时,通常会涉及到事件处理程序。一个很好的例子是某种形式,它有一些字段,其相关性由复选框、单选按钮或选择器控制。一个常见的例子是出现在无数电子商务网站上的“送货地址”复选框:如果选中该复选框,送货地址将被禁用并使用账单地址。
现在考虑一些其他代码,由于其自身的原因,完全独立于复选框控件小部件,实际上可以对表单执行某些操作,包括以编程方式更新复选框设置。在这种情况下,其他小部件代码可能想要使用“triggerHandler()”来告诉任何小部件,“嘿,我已经更新了一些东西,所以你可能想要重新检查当前状态并在必要时进行调整。”
因此,如果“.triggerHandler()”对所有选定元素进行操作,我可以使用:
$theForm.find('input, select, textarea').triggerHandler('change');
所有这些处理程序都可以运行并做他们需要的任何事情。正如我所说,编写起来很容易:
$theForm.find('input, select, textarea').each(function() {
$(this).triggerHandler('change');
});
最佳答案
"...is there some rationale for why the two are different in this respect?"
我认为这个想法是 triggerHandler()
旨在成为一种调用您作为处理程序的函数的方式,就好像它是任何其他函数一样。
因此,他们制作了 triggerHandler()
以便该函数仅被调用一次,它返回函数的实际返回值,并且不会通过冒泡或默认行为影响 DOM .
当然,如果他们将 this
值更改为 DOM 元素以外的值,函数可能会中断,因此他们只使用匹配的第一个元素。
如果您只想简单地使用您的函数,那么我可能只是保留对它的引用并直接调用它,或者作为 .each()
的参数。
$('.element').each( handler_func );
...只要您不需要事件
对象。
编辑:或者如果您想要调用返回的值,请改用 .map()
:
var return_values = $('.element').map( handler_func );
编辑:关于更新问题中提供的示例,一个好的解决方案可能是利用 trigger()
[docs] 的extraParameters 功能方法,以便您可以告诉处理程序 preventDefault()
和 stopPropagation()
。
$('.elememts').bind( 'click', function( e, was_code_triggered ) {
if( was_code_triggered ) {
e.preventDefault();
e.stopPropagation();
}
// your code
});
// ...
$('.elememts').trigger( 'click', true ); // pass "true" to let handler know
// it wasn't a DOM event
来自 .trigger()
文档:
"Note the difference between the extra parameters we're passing here and the eventData parameter to the
.bind()
method. Both are mechanisms for passing information to an event handler, but the extraParameters argument to.trigger()
allows information to be determined at the time the event is triggered, while the eventData argument to.bind()
requires the information to be already computed at the time the handler is bound."
关于javascript - 选择多个元素时,jQuery ".triggerHandler()"与 ".trigger()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7530987/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!