2014-03-14 90 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(); } 
});