Javascript JQuery.focus()事件更改下拉选项
我有一个selectlist,它是在网格中使用jquery构建的。当用户输入一个键时,选择列表就建立起来了,然后我调用click和focus,这样我就可以再次使用键命令 我遇到的问题是,焦点是在选择列表被激发时改变它的选择。以前是否有人经历过这种行为或找到了解决方法?提前谢谢Javascript JQuery.focus()事件更改下拉选项,javascript,jquery,html,focus,telerik,Javascript,Jquery,Html,Focus,Telerik,我有一个selectlist,它是在网格中使用jquery构建的。当用户输入一个键时,选择列表就建立起来了,然后我调用click和focus,这样我就可以再次使用键命令 我遇到的问题是,焦点是在选择列表被激发时改变它的选择。以前是否有人经历过这种行为或找到了解决方法?提前谢谢 function INTEREST_createPaymentTypeDropDown() { //Interest specific: //build a dropdown for the enum
function INTEREST_createPaymentTypeDropDown() {
//Interest specific:
//build a dropdown for the enum
//if the PaymentType input exists
if ($("#PaymentType").length > 0) {
var cellPaymentTypeValue = $("#PaymentType").val();
var selectedOption;
$("#PaymentType").replaceWith("<select id='PaymentType' style='width:95px; height: 20px;' name='PaymentType'></select>");
$.each(INTEREST_PAYMENT_TYPES, function(key, val) {
var newoption = $("<option value=\"" + val + "\">" + key + "</option>");
if (val == cellPaymentTypeValue || key == cellPaymentTypeValue) {
//append select to the current value
selectedOption = val;
}
$("#PaymentType").append(newoption);
$("#PaymentType").addClass("t-input");
});
if (selectedOption != null) {
$("#PaymentType").val(selectedOption.toString());
}
}
function INTEREST_setEditField(field) {
if ($("#PaymentType").length > 0) {
// this is where the problem is
$("#PaymentType").click();
}
else {
$(".t-grid-content").find('.t-input').click();
$(".t-grid-content").find('.t-input').select();
}
INTEREST_persistPaymentTypeOnCellChange(field);
}
function INTEREST_persistPaymentTypeOnCellChange(field) {
//keep the value of the enum not the enum index
//in the payment type field
var paymentTypeCell = $(field).parent().children().eq(1);
if ($(paymentTypeCell).html().length == 1) {
$.each(INTEREST_PAYMENT_TYPES, function(key, val) {
if ($(paymentTypeCell).html() == val) {
$(paymentTypeCell).html(key);
}
});
}
}
$('td.t-grid-edit-cell', 'div#AccountPayments').live('keydown', function(event) {
if (event.which == 39 || event.which == 9) //Tab or right arrow
{
if ($(this).hasClass('t-last')) {
INTEREST_goToNextRow(this, event);
}
else {
INTEREST_goToRight(this, event);
}
}
else if (event.which == 37 || event.which == 9 && event.shiftKey) //left arrow. Todo: add shift tab
{
if ($(this).hasClass('t-first')) {
INTEREST_goToPreviousRow(this, event);
}
else {
INTEREST_goToLeft(this, event);
}
}
else if (event.which == 40) //down arrow
{
INTEREST_goDown(this, event);
}
else if (event.which == 38) //up arrow
{
INTEREST_goUp(this, event);
}
});
$("#PaymentType").live('click', function(event) {
$(this).focus();
});
是否列表顶部没有空选项,因此当调用单击时,会导致PaymentType自动选择第0个选项?Hi有空选项,但默认为第一个选项,而不是第二个选项。当我从右侧或底部输入下拉列表时,它会从第一个值更改为第二个值,如果我从顶部输入,它会更改为第二个值。这可能与此行有关吗?如果val==cellPaymentTypeValue | | key==cellPaymentTypeValue{//append select to the current value selectedOption=val;}为什么代码会将key和val与同一个变量进行比较?它们是一样的吗?另外,焦点调用是否会发送一个您不一定期望的事件代码,并触发keydown事件或其他函数?另外,我假设没有为focus函数定义特殊的行为/函数。这些都是在黑暗中拍摄的,如果没有帮助,我很抱歉。嗨,杰森,谢谢你的回复。我将key和val与my变量进行比较的原因是,单元格中的值可能是字符串或整数。我很确定你对焦点的看法是对的,它似乎会关闭并调用其他事件,而这些事件又会调用焦点,这会改变selectlist selected Index,在我之前的焦点中也发生了一些奇怪的事情。我在设置焦点,它没有将光标放在字段中,但字段实际上有焦点。我首先模糊了视野,然后聚焦了视野,解决了这个问题。你可以试试看它是否有帮助???