Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery中的focus方法没有';行不通_Javascript_Jquery - Fatal编程技术网

Javascript jQuery中的focus方法没有';行不通

Javascript jQuery中的focus方法没有';行不通,javascript,jquery,Javascript,Jquery,以下代码用于检查模糊字段中是否输入了4个数字。否则,将删除字段值,并聚焦该字段。删除工作正常,但调用focus()不起作用 $('input.dateValue').live('blur',function(event){ if (!(/(\d){4}$/.test($(this).attr('value')))) $(this).attr('value','').focus(); }); 为什么对focus()的调用不聚焦字段?演示 尝试使用this.value而不是$(this.att

以下代码用于检查模糊字段中是否输入了4个数字。否则,将删除字段值,并聚焦该字段。删除工作正常,但调用focus()不起作用

$('input.dateValue').live('blur',function(event){
  if (!(/(\d){4}$/.test($(this).attr('value')))) $(this).attr('value','').focus();
});
为什么对focus()的调用不聚焦字段?

演示

尝试使用
this.value
而不是
$(this.attr(…)

希望这有助于解决问题,
:)

哦,如果您使用的是Jquery 1.7及更高版本,我已经在事件中使用了

请阅读以下内容:

阅读此处

还有另一个已知的带有SetTimeOut的论坛解决方案见下文

代码

$('input.dateValue').on('blur', function(event) {

    if (!(/(\d){4}$/.test(this.value))) {

        $(this).val('').focus();
    };
});​

使用focusout代替模糊


提示:

缩进你的代码

使用$.val(“”)代替attr值

在使用IF()时,请使用brakets{}

写得更干净,尽可能简单,这样你以后就不会感到困惑了


快乐编码:)

由于
模糊事件在实际失去焦点之前触发,因此不能立即使用
.focus()
。您必须将其下推堆栈,以便在
输入
失去焦点后执行。将
.focus()
放入计时器(无需延迟):

这是小提琴:


更新:为了证明这在Chrome中确实有效,我做了另一个小提琴:

小细节

大多数时候我读到这样的问题。 这通常是因为事件不正确。 在要求系统设置焦点之前,请确保页面已被处理

这里是一个示例,其中事件页面显示比页面预览显示更好

不是这样工作的

/**
 *** a hook to handle list drawing. DOES NOT WORK**
 */
$(document).delegate('#dropdownPopupWindow', "pagebeforeshow", function() {
    console.log(UIPopup.TAG+"pagebeforeshow on popup dropdownPopupWindow is setting focus on field field_dropdown_label");
    $('#field_dropdown_label').focus();
});
/**
 *** a hook to handle list drawing.**
 */
$(document).delegate('#dropdownPopupWindow', "pageshow", function() {
    console.log(UIPopup.TAG+"pageshow on popup dropdownPopupWindow is setting focus on field field_dropdown_label");
    $('#field_dropdown_label').focus();
});
像这样工作

/**
 *** a hook to handle list drawing. DOES NOT WORK**
 */
$(document).delegate('#dropdownPopupWindow', "pagebeforeshow", function() {
    console.log(UIPopup.TAG+"pagebeforeshow on popup dropdownPopupWindow is setting focus on field field_dropdown_label");
    $('#field_dropdown_label').focus();
});
/**
 *** a hook to handle list drawing.**
 */
$(document).delegate('#dropdownPopupWindow', "pageshow", function() {
    console.log(UIPopup.TAG+"pageshow on popup dropdownPopupWindow is setting focus on field field_dropdown_label");
    $('#field_dropdown_label').focus();
});

如果您使用的是引导模式,则这不起作用:

$('#modalID').modal('show');
$('#modalID #fieldID').focus();
因为需要一点时间才能画出模态,并可用于聚焦。。。我发现400毫秒的超时足够快,用户不会受到影响,并且足够慢,它总是关注元素

$('#modalID').modal('show');
setTimeout(function(){  $('#modalID #fieldID').focus(); }, 400);
实际上,使用可执行注释不会有什么坏处:

function wait_for_modal_to_be_drawn_then( fn )
{
  setTimeout( fn, 400 );
}

$('#modalID').modal('show');
wait_for_modal_to_draw_then( 
     function(){  $('#modalID #fieldID').focus(); } 
);

你确定你的函数真的被执行了吗?添加
警报(“测试”)就在
if
语句之前。这样,每当函数执行时,您就会在屏幕上看到一条消息。@Jocelyn正则表达式确实有效(在blur中,它确实会删除任何不是四位数的值),因此链的一部分会被执行,而focus()部分不会。请注意,正则表达式在字段末尾测试了4位数。(例如,“asdf1234”将通过。)如果您想要4位数字而不需要其他任何内容,请将其设置为
/^\d{4}$/
。@nnnnnn谢谢这是一个很好的提示当我在Chrome中时,我注意到如果我向前或向后切换到另一个输入,它确实会将焦点设置回原位,但如果我单击文档或从最后一个字段向前切换,则不会。奇怪。为什么
$(this.attr('value','')
?为什么不干脆
$(this).val(“”)
?当我尝试演示时,键入'asdf',它会删除它,但字段仍然没有聚焦(即我无法在字段中键入而不手动重新聚焦)@JosephSilber确实会很快更新,尽管我也会给你一个细微的区别,谢谢
:)
@JosephSilber我只是在学习jquery,我不知道最好的方法。使用$(this.val('')更好吗?@jela请看这里:
:)
这对我来说没有任何区别。如果您尝试将焦点设置为另一个字段,则“模糊”和“聚焦输出”都有效,但如果您单击该文档或该文档是最后一个字段(例如,使用制表符将焦点向上移动到地址栏),则它们都无效;在您的案例中,我在Chrome中尝试了您的演示,当我从该字段按tab键时,焦点会移到地址栏并停留在那里。@nnnnnnnn-在演示中-因为没有其他字段可供关注-按
tab
键会将您带出窗口上下文,Javascript的统治已经消失。如果页面上还有其他可聚焦的元素,。你在这方面击败了我,有趣的是,这些替代元素似乎只在Chrome中失败。添加了可执行注释位。