2012-07-24 277 views
0

我有一個自動完成文本框無法觸發按鍵事件。Jquery keyup或keydown事件不起作用

下面是自動完成框代碼

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#TransFinishedPartNumber").autocomplete({ 
     source: function (request, response) { 
      // define a function to call your Action 
      $.ajax({ 
       url: '@Url.Action("partLookUp", "Transaction")', 

       // term will be the param used by your action method 
       data: { term: request.term }, 
       success: function (data) { 
        response($.map(data, function (item) { 
         return { label: item.pt_part + " " + item.pt_desc1, value: item.pt_part }; 
        })) 
        $("#TransFinishedPartNumber").removeClass('acLoading'); 
       }, 
       error: function() { 
        $("#TransFinishedPartNumber").removeClass('acLoading'); 
       } 
      }) 
     }, 
     minLength: 1, // require at least one character from the user 
     search: function() { $(this).addClass('acLoading'); }, 
    }); 

}); 

現在,這裏是它的JavaScript將永遠不會觸發...不住或結合或任何與此有關的...的事件,但最不可思議的是自動完成框中工程...

<script type="text/javascript"> 
//Transaction Event handlers and ajax calls 
$(document).ready(function() { 
    $("#TransFinishedPartNumber").bind("keydown",function (e) { 
     $("#TransFinishedPartNumber").addClass("ui-state-default"); 

    }); 
    $("#TransFinishedPartNumber").bind("keydown",function (e) { 
     $("#TransFinishedPartNumber").removeClass("ui-state-default"); 

    }); 
}); 

餘噸裏德這樣也

<script type="text/javascript"> 
//Transaction Event handlers and ajax calls 
$(document).ready(function() { 
    $("#TransFinishedPartNumber").keydown(function (e) { 
     $("#TransFinishedPartNumber").addClass("ui-state-default"); 

    }); 
    $("#TransFinishedPartNumber").keydown(function (e) { 
     $("#TransFinishedPartNumber").removeClass("ui-state-default"); 

    }); 
}); 

我改這個劇本是絕對肯定的,當你按住該鍵

<script type="text/javascript"> 
//Transaction Event handlers and ajax calls 
$(document).ready(function() { 
    $("#TransFinishedPartNumber").keydown(function (e) { 
     alert(e.which); 
    }); 
}); 

+0

你確定它只是沒有開火,問題不是'兩者都同時發射?嘗試刪除第二個綁定並將'addClass'更改爲'toggleClass' – bokonic 2012-07-24 21:17:37

+0

在這種情況下,** debug **是您的朋友:組成重複(或通常 - 不會重現)問題並檢查它的平凡頁面。處理小布局和小js更容易,而不是與你綁定'keydown'的巨大項目 – zerkms 2012-07-24 21:18:03

+2

,所以它立即添加然後刪除類。 – MrOBrian 2012-07-24 21:22:34

回答

0

keydown事件不斷激發。您可能想要嘗試鍵控。

示例如果您執行了以下操作並保留了某些內容,它將不斷進行。實際上每秒很多次:

$("body").bind("keydown",function(){ 
    $("body").append("pizza<br>"); 
}); 

但是隻有keyup發生一次!

$("body").bind("keyup",function(){ 
    $("body").append("pizza<br>"); 
}); 

因此,因爲你的代碼有兩次keydown事件。它每秒多次添加和刪除類。