jquery:使用 jquery 更改输入 val 不会影响输入拦截器
Posted
技术标签:
【中文标题】jquery:使用 jquery 更改输入 val 不会影响输入拦截器【英文标题】:jquery: changing input val with jquery doesn't affect the input interceptor 【发布时间】:2014-03-14 04:40:57 【问题描述】:伙计们!
让我们假设以下代码:
$(document).ready(function()
var data = 'clients=&categories=&keywords=&limit='+limit;
$.ajax(
type: 'POST',
url: 'index.php?ind=work&op=get_list',
data: data,
success: function (data)
$('.list').html(data);
$('.thumb').click(function()
var idz = 'id='+$(this).attr('id');
$.ajax(
type: 'POST',
url: 'index.php?ind=work&op=get_work',
data: idz,
success: function (data)
$('.client').click(function()
$('#clients').val($('.client').text());
);
);
);
);
);
$(document).ready(function()
$('input').on('change', function()
var clients = $('#clients').val(),
data = 'clients='+clients;
$.ajax(
type: 'POST',
url: 'index.php?ind=work&op=get_list',
data: data,
success: function (data) $('.list').html(data);
$('.thumb').click(function()
var idz = 'id='+$(this).attr('id');
$.ajax(
type: 'POST',
url: 'index.php?ind=work&op=get_work',
data: idz,
success: function (data)
$('.work').hide().html(data).slideToggle('slow');
);
);
);
);
);
页面上的某处有一个输入和一些图像:
<div class="work"></div>
<input type="text" id="clients" name="clients">
<div class="list">Some thumbnails that call index.php?ind=work&op=get_work</div>
现在,当我在输入中键入任何内容时,jquery 会在更改时拦截它并从 get_list 函数获取信息。它与 .keyup()、.change()、.on('change') 和 .on('input') 完美配合。
但是当我按下客户端名称(span with class="client")时,输入#clients 发生了变化,但列表没有加载。
我觉得我错过了一些非常基本的东西:))
感谢提示!
【问题讨论】:
请分享一个小提琴。 你必须手动触发更改事件 【参考方案1】:如果您以编程方式更改 TextBox 的值,则不会触发 change 事件。
要触发事件,您已使用 change()
手动触发事件更改此代码
$('.client').click(function ()
$('#clients').val($('.client').text());
);
到
$('.client').click(function ()
$('#clients').val($('.client').text());
$('#clients').change();
);
【讨论】:
【参考方案2】:我在您的代码中没有看到任何<span class=client>
,但假设它在那里,您的错误是设置<input>
元素的值不会触发任何事件,甚至不会触发“输入”或“更改”。这些只会由实际的用户操作触发。尝试在您的点击处理程序中直接触发事件:
$('.client').click(function()
$('#clients').val($('.client').text());
$('#clients').trigger('change'); // or whatever event you are listening for
);
或者,更简单地说:
$('.client').click(function()
$('#clients').val($('.client').text()).trigger('change');
);
【讨论】:
【参考方案3】:我认为这是因为您在输入更改时注册了 span 事件......所以当它单击 span 时文本会更改但未注册。
您在点击发生后注册跨度点击...您可以通过在跨度上单击一次来验证这一点,然后再次点击。
最好的办法是在加载时注册所有事件,如果您想阻止事件操作,请使用布尔值。
喜欢:
var preventaction = true;
$("#btn1").click(function()
If (! preventaction) dostuf();
);
【讨论】:
以上是关于jquery:使用 jquery 更改输入 val 不会影响输入拦截器的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net 客户端验证错误消息不断显示来自 jquery 的值更改
使用 val() 和 trigger('change') 更改输入值
Jquery UI Slider在输入字段中更改时更改滑块的值