这不仅仅是一个问题,更是一种好奇心,但我想知道为什么下面的方法不起作用。
假设我有一个带有选择器和提交按钮的html表单。

 <form action="/foo/createActivity" method="post" name="activityform" id="activityform" >

<select name="activity" id="activity" >
<option value="1" >Activity 1</option>
<option value="2" >Activity 2</option>
</select>
<input type="submit" class="submit" id="add" value="Add >>"/>
</form>

然后我有一个定义了jquery的ajax调用
$('#activity').change(function() {
    tryDisable($('#activity').val());
});

function tryDisable(activity) {
$.ajax({
    type: 'GET',
    contentType: 'application/json',
    cache: false,
    url: '/foo/checkActivity',
    data: {
        activity: activity
    },
    success: function(disableSubmit) {

        if (disableSubmit == "true") {
            $('#add').attr('disabled', 'true');
        } else {
            $('#add').removeAttr('disabled'); // Problem in IE, doesn't take away CSS of disabled
            // $('#add').css({"text-align" : "center"});
            // NO idea why the above fixes the problem, TODO find out
        }
    },
    dataType: 'json'
});
return false;
}

您将在我的评论中看到,只有.removeattr('disabled')导致按钮重新启用,但按钮看起来仍然是禁用的(灰色)。但是,如果我像在注释行中那样通过jquery“勾选”css,则应用正确的、非禁用的样式。firefox和chrome只在第一行运行良好,正如我所料。
有人知道为什么吗?在这儿干什么这么奇怪?

最佳答案

我以前也遇到过同样的问题。我在谷歌上找到了这张来自jQuery website的便条。
注意:在Internet Explorer 6、7或8中,尝试使用onclick删除内联.removeAttr()事件处理程序不会达到所需的效果。要避免潜在问题,请使用.prop()

$element.prop("onclick", null);
console.log("onclick property: ", $element[0].onclick); // --> null

我在这里也找到了一些关于.removeAttr()的帖子:
removeAttr() issue
.prop('checked',false) or .removeAttr('checked')?
john resig的这篇文章也很有帮助。

07-26 08:00