jquery:使用jquery更改输入val不会影响输入拦截器

时间:2014-03-14 04:40:57

标签: javascript jquery

人!

让我们假设以下代码:

    $(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(&#39; change&#39;)和.on(&#39; input&#39;)完美配合。

但是当我按下客户端名称(span = class#&#34; client&#34;)时,输入#clients会被更改,但列表不会被加载。

我有一种感觉,我想念一些基本的东西:))

感谢提示!

3 个答案:

答案 0 :(得分:4)

如果要以编程方式更改TextBox的值,则更改事件不会触发。

通过使用更改()

手动触发事件来触发事件

更改此代码

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我认为这是因为您在输入更改时注册了span事件...所以当文本点击跨度但未注册时文本会发生变化。

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

最好的办法是在加载时注册所有事件,如果你想阻止事件动作,则使用布尔值。

喜欢:

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