0

我的网页中有以下代码,我需要单击输入字段并使用提供的数字键盘添加值!当焦点出现时,我使用脚本从输入中清除默认值,但是我无法通过单击数字键盘来添加值,因为当我单击一个元素时,焦点来自于被单击的输入数元素。我该如何解决这个问题。我尝试了以下代码,但它没有显示输入中的数字。

var lastFocus;

$("#test").click(function(e) {
    // do whatever you want here
    e.preventDefault();
    e.stopPropagation();
    $("#results").append(e.html());
    if (lastFocus) {
        $("#results").append("setting focus back<br>");
        setTimeout(function() {lastFocus.focus()}, 1);
    }
    return(false);
});


$("textarea").blur(function() {
    lastFocus = this;
    $("#results").append("textarea lost focus<br>");
});

谢谢你。

4

3 回答 3

1

这应该有效:

var default_val = '';

$('input').focus(function() {
    lastFocus = $(this);
    if($(this).val() == $(this).data('default_val') || !$(this).data('default_val')) {
        $(this).data('default_val', $(this).val());
        $(this).val('');
    }
});

$('input').blur(function() {
    if ($(this).val() == '') $(this).val($(this).data('default_val'));
});

var lastFocus;

$('.num-button').click(function(e){
    e.preventDefault();
    e.stopPropagation();
    var text = $(e.target).text();
    if (!isNaN(parseInt(text))) {
        lastFocus.val(lastFocus.val() + text);
    }
});

现场演示

于 2013-04-24T11:56:06.343 回答
1

我注意到的第一件事是您的数字按钮选择器错误

$('num-button').click(function(e){

您的按钮有一个num-button因此您需要在选择器中的类名前加一个点:

$('.num-button').click(function(e){

其次,您的小提琴从未设置过lastFocus,因此请务必添加:

$('input').focus(function() {
    lastFocus = this;
    ...

第三,您在输入字段时添加/删除水印,但在尝试向其添加数字时添加/删除水印(如果您单击 1,然后单击 2,然后单击 3,则会导致“Watermark-text123”)。

因此,将您的功能封装在一个函数中:

function addOrRemoveWatermark(elem)
{
    if($(elem).val() == $(elem).data('default_val') || !$(elem).data('default_val')) {
        $(elem).data('default_val', $(elem).val());
        $(elem).val('');
    }
}

并在输入单元格和单击数字时调用:

$('input').focus(function() {
        lastFocus = this;
        addOrRemoveWatermark(this);
});

和:

$('.num-button').click(function(e){
    e.preventDefault();
    e.stopPropagation();
    addOrRemoveWatermark(lastFocus);
    $(lastFocus).val($(lastFocus).val() + $(this).children('span').html());
});

您将在上面看到另一个更改 - 您不想append在附加元素时使用,您只想将字符串与单击的按钮的值连接起来。

这是您的代码的一个工作分支:http: //jsfiddle.net/Zrhze/

于 2013-04-24T12:00:34.957 回答
1

添加以下功能:

$('.num-button').live( 'click', 'span', function() {
    $currObj.focus();
    $currObj.val( $currObj.val() + $(this).text().trim() );
});

此外,将以下变量添加到全局范围:

$currObj = '';

这是工作链接:http: //jsfiddle.net/pN3eT/7/

编辑

根据评论,您将不需要 varlastFocus和后续代码。

更新的小提琴在这里http://jsfiddle.net/pN3eT/28/

于 2013-04-24T12:00:51.320 回答