首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$(.attr).attr(“id”)不工作

$(.attr).attr(“id”)不工作
EN

Stack Overflow用户
提问于 2010-07-27 15:01:13
回答 10查看 227.5K关注 0票数 18

正如标题所说,当我试图获取一个元素的id属性时,我一直处于“未定义”状态,基本上我想做的是,当元素的值为“其他”时,用一个输入框替换该元素。

代码如下:

代码语言:javascript
复制
function showHideOther(obj) {
    var sel = obj.options[obj.selectedIndex].value;
    var ID = $(this).attr("id");
    alert(ID);

    if (sel == 'other') {
        $(this).html("<input type='text' name='" + ID + "' id='" + ID + "' />");

    } else {
        $(this).css({
            'display': 'none'
        });
    }
}

HTML:

代码语言:javascript
复制
          <span class='left'><label for='race'>Race: </label></span>
          <span class='right'><select name='race' id='race' onchange='showHideOther(this);'>
            <option>Select one</option>
            <option>one</option>
            <option>two</option>
            <option>three</option>
            <option value="other">Other</option>
          </select>
          </span>

这可能是一些我没有注意到的小事情,我做错了什么?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-07-27 16:40:05

由于调用函数的方式(即,作为对函数变量的简单调用),this是全局对象(对于全局对象,window是浏览器中的别名)。请改用obj参数。

此外,创建一个jQuery对象并使用它的attr()方法来获取元素ID是低效的,也是不必要的。只需使用元素的id属性即可,该属性适用于所有浏览器。

代码语言:javascript
复制
function showHideOther(obj){ 
    var sel = obj.options[obj.selectedIndex].value;
    var ID = obj.id;

    if (sel == 'other') { 
        $(obj).html("<input type='text' name='" + ID + "' id='" + ID + "' />");
    } else {
        $(obj).css({'display' : 'none'});
    }
}
票数 5
EN

Stack Overflow用户

发布于 2010-07-27 15:09:00

变化

代码语言:javascript
复制
var ID = $(this).attr("id");

代码语言:javascript
复制
var ID = $(obj).attr("id");

您还可以将其更改为使用jQuery事件处理程序:

代码语言:javascript
复制
$('#race').change(function() {
    var select = $(this);
    var id = select.attr('id');
    if(select.val() == 'other') {
        select.replaceWith("<input type='text' name='" + id + "' id='" + id + "' />");
    } else {
        select.hide();
    }
});
票数 17
EN

Stack Overflow用户

发布于 2010-07-27 15:06:54

在应该使用参数的时候,在函数中使用this

您仅在回调中使用$(this) ...从像这样的选择

代码语言:javascript
复制
$('a').click(function() {
   alert($(this).href);
})

最后,正确的方法(使用您的代码示例)应该是这样做的

obj.attr('id');

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

https://stackoverflow.com/questions/3341342

复制
相关文章

相似问题

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