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】:

我在您的代码中没有看到任何&lt;span class=client&gt;,但假设它在那里,您的错误是设置&lt;input&gt; 元素的值不会触发任何事件,甚至不会触发“输入”或“更改”。这些只会由实际的用户操作触发。尝试在您的点击处理程序中直接触发事件:

$('.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 不会影响输入拦截器的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 将值从一个输入镜像到另一个输入

Asp.net 客户端验证错误消息不断显示来自 jquery 的值更改

使用 val() 和 trigger('change') 更改输入值

Jquery UI Slider在输入字段中更改时更改滑块的值

为啥 jQuery.val(value) 不会从 DOM 元素中分派任何事件?

用 jquery 为下一项赋值