2014-03-14 52 views
0

伙计们!jquery:改变与jQuery的输入val不会影响输入拦截器

假设下面的代码:

$(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 = class =“client”)时,输入#clients被更改,但列表未加载。

我有一种感觉,我错过了什么SOOOO基本:))

感谢的提示!

+0

请分享小提琴。 –

+0

你必须手动开火改变事件 – Vinod

回答

4

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

触发事件u必须手动使用变化()

变化引发事件的代码

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

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

真棒,非常感谢! –

1

我没有看到任何<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'); 
}); 
0

我想这是因为你注册的跨度事件当输入的变化......所以文字变化当它点击跨度时,但没有注册。

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

最好的办法是在负载中注册所有事件,并使用布尔值(如果您想阻止事件操作)。

像:

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