Jquery:单击时更改按钮及其兄弟的属性

时间:2015-11-19 16:28:25

标签: javascript jquery html symfony

我有按钮的div。如果div是封面,那么按钮的文字就是' Cover'并且它被禁用了。其他按钮有文字'设为封面'并启用。如果我点击其他按钮,它应该将其文本更改为' Cover'并成为残疾人士。那是一个覆盖'应改为'设为封面'并启用。

的JavaScript

function setCoverObject(id) {
    var url = "{{ path('collection_set_cover', {'id' : id}) }}";
    $.ajax({
        url: url,
        success: function (data) {
           $(this).prop('disabled', true);
            $(this).attr('value', 'Cover');
            $(this).siblings('.set_as_cover').prop('disabled', false);
            $(this).siblings('.set_as_cover').attr('value', 'Set cover');
        }
    });
}

枝条

{% for object in collection.objects %}
<div class="object">
<button id="cover_button_{{ object.id }}"class="set_as_cover"
                       onclick="setCoverObject('{{ object.id }}'); return false;">
                        Set cover
                    </button>
</div>
{% endfor %}

此代码无效,但在页面重新加载后,将应用所有更改。

1 个答案:

答案 0 :(得分:1)

假设setCoverObject是一个事件处理程序,您需要将AJAX回调绑定到this值。所以:

success: function (data) {
  ...
}.bind(this)

如果它不是事件处理程序,那么找到你的button元素并将回调绑定到它。 E.g:

var button = $("#id-of-your-button").get(0)
success: function (data) {
  ...
}.bind(button)

另外,为了设置按钮文本,你不应该使用按钮的value属性,你应该设置按钮内容,而不是

some_button.attr('value', 'Set cover') 

使用:

some_button.text('Set cover')