jquery:用jquery更改输入val;t影响输入拦截器

jquery: changing input val with jquery doesn't affect the input interceptor

本文关键字:输入 jquery 影响 val      更新时间:2023-09-26

伙计们!

让我们假设以下代码:

    $(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"(时,输入的#client会发生更改,但列表不会加载。

我有一种感觉,我错过了一些非常基本的东西:(

谢谢你的提示!

如果您正在用程序更改TextBox的值,那么更改事件不会触发。

要触发事件,您必须使用change((手动触发事件

更改此代码

 $('.client').click(function () {
     $('#clients').val($('.client').text());
 });

 $('.client').click(function () {
     $('#clients').val($('.client').text());
     $('#clients').change();
 });

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

$('.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');
});

我认为这是因为当输入更改时,您注册了span事件。。。因此,当它点击跨度时,文本会发生变化,但没有注册。

您在点击发生后注册跨度点击。。。您可以通过在span上单击一次,whait,然后再次单击来验证这一点。

最好的方法是在负载上注册所有事件,如果您想阻止事件操作,请使用布尔值。

类似:

var preventaction = true;
$("#btn1").click(function(){
If (! preventaction) { dostuf(); }
});