倾听单个输入的变化
Listen for change on a single input
我有一个包含两个字段的表单,它们的值是通过编程填充的。当我通过JS更改值时,我正在使用.trigger('change')
,然后用侦听此更改
$('body').on('change', $(myInput1), function() {});
和
$('body').on('change', $(myInput2), function() {});
问题是,如果我更改myInput1
,两个侦听器都是活动的(就像我更改了两个输入一样)。
这里有一个小演示来重现这个问题:
$(document).ready(function() {
$('a').click(function() {
var randomValue = Math.random(0, 1) * 100;
var holder = $(this).closest('.holder');
holder.find('input').attr('value', randomValue);
holder.find('input').trigger('change');
});
$('body').on('change', $('input[name="field_one"]'), function() {
alert('field one has changed');
});
$('body').on('change', $('input[name="field_two"]'), function() {
alert('field two has changed');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form>
<div class="holder">
<a href="#" class="field1">Change me</a>
<input type="hidden" name="field_one" />
</div>
<div class="holder">
<a href="#">Change me</a>
<input type="hidden" name="field_two" />
</div>
</form>
和jsfiddle演示
使用事件委派时,on
的第二个参数应该是作为选择器的字符串。在您的情况下,您将传递一个jQuery对象作为第二个参数,因此事件注册将其视为数据对象,处理程序将注册到body
元素,jQuery对象将在处理程序中作为event.data
传递
$(document).ready(function() {
$('a').click(function() {
var randomValue = Math.random(0, 1) * 100;
var holder = $(this).closest('.holder');
holder.find('input').val(randomValue).change();
//holder.find('input').attr('value', randomValue);
//holder.find('input').trigger('change');
});
$('body').on('change', 'input[name="field_one"]', function() {
snippet.log('field one has changed');
});
$('body').on('change', 'input[name="field_two"]', function() {
snippet.log('field two has changed');
});
$('body').on('change', $('input[name="field_one"]'), function(e) {
snippet.log('handler 1:' + this.tagName + ':' + e.data.selector);
});
$('body').on('change', $('input[name="field_two"]'), function(e) {
snippet.log('handler 2:' + this.tagName + ':' + e.data.selector);
});
});
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form>
<div class="holder">
<a href="#" class="field1">Change me</a>
<input type="hidden" name="field_one" />
</div>
<div class="holder">
<a href="#">Change me</a>
<input type="hidden" name="field_two" />
</div>
</form>
尝试FIDDLE
不要将第二个参数作为Jquery对象传递
尝试从更改选择器
$('body').on('change', $('input[name="field_one"]'), function(e) {
至
$('body').on('change','input[name=field_one]', function(e) {
希望它对你有用。
相关文章:
- 如何将(a*b)两个输入文本值相乘,并在javascript中随文本变化动态显示
- 如何在呈现页面后使用 Java 脚本检测 dom 元素值的值是否有任何变化(例如,任何输入或复选框值更改)
- ng变化不会'除非我输入了有效的电子邮件地址,否则我不会因为输入电子邮件而被解雇
- jquery ui:检测输入中的首次时间变化
- 输入值偶尔变化
- 基于自身输入变化的角度验证输入
- 简化 jQuery 以检测输入值的变化
- HTML5 范围输入值在引导弹出窗口中没有变化
- 根据输入数量(数量)变化计算价格
- 流星“变化”值在释放鼠标时出现,而不是在拖动输入滑块时出现
- Javascript 不会检查文本输入值是否随组合网格而变化
- 两个按钮,可随背景位置变化而切换,并在输入中显示结果
- 纯 JavaScript 侦听输入值的变化
- AngularJS,如何使两个输入字段'每当它们动态变化时,s的和总是等于第三个输入
- 如何让经典的ASP表单识别输入中的变化
- 倾听单个输入的变化
- Rails3/随着输入的变化而动态地重新计算字段
- ng变化不会't在数字输入类型上触发
- 立即检测输入[类型=“文本”]的变化
- Jquery:计算实时表单输入,它也会随着复选框的变化而变化