如果用户离开,则将焦点设置为文本框

时间:2011-03-16 12:52:09

标签: php jquery focus this

我目前难以完成我必须完成的实验室。我需要建立一个在线网站,找到银币的价值(使用带有xampp的localhost)。我坚持的实验室部分是我必须检查用户离开时文本框中是否有值的地方。如果不是,我需要输出并提醒并将焦点设置回该文本框。我找不到使用“this”让焦点工作的方法。我可能还应该提到有四个复选框,每个文本框都属于一个相应的复选框。

模糊功能是我无法让焦点发挥作用的地方。

$(function() 
{

    $(":checkbox").click(function()
    {   
        if($(this).attr("checked"))
            $(this).parent().siblings().children().attr("disabled", false).focus();
        else
            $(this).parent().siblings().children().attr("disabled", true).val("");
    });

    $(":text").blur(function()
    {
        if($(this).val() == "")
        {
            alert("Please enter a value");
            $(this).focus();
        }
    });

    $("#btnEnter").click(function()
    {
        if($(":checkbox:checked").val())
            $("form").submit();
        else
            alert("No coin types were selected");
    });
});

2 个答案:

答案 0 :(得分:0)

我建议在HTML中添加一些ID或类,以使您的生活更轻松。它将使您的HTML,CSS和JS中的复选框更容易区分。此外,使用ID或Class访问Javascript中的DOM对象比尝试在整个地方爬上DOM树并在此过程中完全丢失更容易。

话虽如此,我建议以类似的方式识别复选框和文本框。例如:

checkbox id="silver1".....input type="text" id="silver1num" value=""

那样

if($(“#silver1”)。checked& $(“#silver1num”)。value ==“”){

  MsgBox.........
  $("#silver1num").focus();

}

您甚至可以迭代每个复选框,并减少一些代码。在每个复选框中添加一类“silvercoin”。

$(".silvercoin").each(function(){
    if( $(this).checked && $( "#"+$(this).attr(id)+"number") ).value == "" ) {
        MsgBox......
        $(this).attr(id)+"number").focus();
    }
});

注意:$(“#”+ $(this).attr(id)+“number”))从复选框中提取ID - “silver1”并在其上添加“number”以显示“#silver1number “这是相应输入框的id。

我只是从内存中输入了所有这些代码,所以我可能错误地输入了一两件事,但概念是相同的。自从我玩jQuery以来已经有一两个月了。

答案 1 :(得分:0)

发现问题。我需要它将焦点重置到文本框,但因为当我点击其他内容时我正在使用复选框的click事件。我需要做的是在设定的时间内延迟,但这要求它忘记“这个”指的是什么。然后解决方案是在循环外部创建一个变量,该变量抓取我所指的元素的ID。

$(":text").blur(function()
{
    var ID = $(this).attr("id");

    if($(this).val() == "")
    {
        alert("Please enter a value");
        setTimeout(function()
        {
            $("#" + ID).focus();
        }, 50);
    }
});