首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jquery绑定事件

jquery绑定事件
EN

Stack Overflow用户
提问于 2011-05-26 16:08:58
回答 2查看 2.4K关注 0票数 1

我正在使用jquery编写面板,您可以在这里看到:http://www.taoktalk.com/socialapps/baidu/taozhe/ --我的逻辑是:

当我单击每个按钮时,输入元素的缺陷值发生变化;每次在输入元素中聚焦时,该值被清除;如果没有键入任何内容,则

  1. ,默认值被重置,但如果键入一些单词,则单词就是值。

方法'inputWithDefValue‘实现了逻辑2和3,但是逻辑1,当我单击按钮集时,evnet’焦点‘和'blur’是递增绑定的,因此'defVal‘变量是不正确的。如何解决这个问题谢谢。

对于调试,我在focus evnet中使用“警报(DefVal)”。

Javascrip代码:

代码语言:javascript
复制
$(function() {
    $( "#tabs" ).tabs();

    var selectedTab = ''
    $( "#tabs" ).bind( "tabsselect", function(event, ui) {
        //selectedTab = ui.panel.id;
    });
    $( "#goods" ).buttonset();
    $( "#shop" ).buttonset();

    var defaultInputVal = '';
    $('input[type=radio]').bind('click', function(){
            switch (this.id){
                case 'goods-url':
                    defaultInputVal = '输入宝贝网址';
                    break;
                case 'goods-name':
                    defaultInputVal = '输入宝贝名称';
                    break;
                case 'goods-id':
                    defaultInputVal = '输入宝贝编号';
                    break;
                case 'shop-url':
                    defaultInputVal = '输入店铺网址';
                    break;
                case 'shop-nick':
                    defaultInputVal = '输入店铺名称';
                    break;
            }
            $('input.input-search').val(defaultInputVal);  //set default value of input.input-search element
            $('input.input-search').inputWithDefValue(defaultInputVal);  //excute inputWithDefValue method every time after click
        });


    //excute inputWithDefValue method without click buttonset
    $('input#input-goods').inputWithDefValue('输入宝贝网址');
    $('input#input-shop').inputWithDefValue('输入店铺网址');
});

$.fn.extend({
    inputWithDefValue: function(defVal){
        this.bind('focus', function(){
            alert(defVal);   //for debug purpose 
            if ($(this).val() == defVal) {
                $(this).val('').css({
                    'color': 'black'
                });
            }
        });

        this.bind('blur', function(){
            if ($(this).val() == '') {
                $(this).val(defVal).css({
                    'color': '#969696'
                });
            }
        });

    }
});
EN

回答 2

Stack Overflow用户

发布于 2011-05-26 17:07:18

恐怕您的代码需要相当大的重构。使用当前的实现,在每个单选按钮上单击您将更新和更新的函数绑定到模糊和焦点事件--这只是您的问题之一(尽管是最严重的问题)。

当您很好地将您的需求放入一个有序列表中时,很明显您需要绑定到三个事件:单击按钮、聚焦和模糊输入字段。这是一个很好的指示,说明您必须实现以下功能(不需要使用$.fn.extend):

代码语言:javascript
复制
$('input[type=radio]').on('click', function() { ... });
$('input.input-search').on('focus', function() { ... });
$('input.input-search').on('blur', function() { ... });

因此,正确的方法是一次将defaultInputVal声明为对象,而不是单个字符串,如下所示:

代码语言:javascript
复制
var defaultInputVal = {
  goods-url  : '输入宝贝网址',
  goods-name : '输入宝贝名称',
  ...
};

根据任何输入字段的id,您可以很容易地获得给定字段的默认值。上面提到的三个功能应该沿着这样的思路运行:

代码语言:javascript
复制
$('input[type=radio]').on('click', function() { 
  $('input.input-search').val(defaultInputVal[$(this).attr('id')]);
});

$('input.input-search').on('focus', function() {
  var selected_radio_id = $('input[type=radio]:checked').attr('id');
  if ($(this).val() == defaultInputVal[selected_radio_id]) {
    $(this).val('').css({
      'color': 'black'
    });
  }
}).on('blur', function() {
  var selected_radio_id = $('input[type=radio]:checked').attr('id');
  if ($(this).val() == '') {
    $(this).val(defaultInputVal[selected_radio_id]).css({
      'color': '#969696'
    });
  }
});

代码是未经测试的,但应该指出正确的方向。仍然有很大的改进空间,比如不将全局命名空间中的变量乱扔,但这可能是您需要采取的第一步。

票数 2
EN

Stack Overflow用户

发布于 2011-05-27 06:32:01

将扩展方法更改为此方法

代码语言:javascript
复制
$.fn.extend({
    setAsDefault: function(defValue, undefined) {
        this.each(function() {
            var valueToUse = (defValue === undefined) ? this.value : defValue;
            this.defaultValue = valueToUse;
            this.value = valueToUse;
        });
    },
    revertToDefault: function(optionalValue) {
        return this.bind('focus', function() {
            if (this.value == this.defaultValue) {
                $(this).val('').css({
                    'color': 'black'
                });
            }
        }).bind('blur', function() {
            if (this.value == '') {
                $(this).val(this.defaultValue).css({
                    'color': '#969696'
                });
            }
        }).setAsDefault(optionalValue);
    }
});

它创建两个方法,一个扩展对象以对模糊事件和焦点事件作出反应,另一个方法允许您设置默认值。

用于初始化使用

代码语言:javascript
复制
$('input.input-search').revertToDefault('输入宝贝网址');

对于您的单选按钮使用

代码语言:javascript
复制
$('input.input-search').setAsDefault(defaultInputVal);

的全工作演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6141631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档