JQuery - 禁用提交按钮,除非原始表单数据已更改

时间:2015-08-18 11:49:36

标签: javascript jquery html css forms

我在这里找到了以下代码(Disable submit button unless original form data has changed)并且它有效,但对于我的生活,我无法弄清楚如何更改同一提交按钮的属性,文本和CSS。 / p>

我希望启用/禁用按钮时文本,背景和悬停背景不同,并且还要切换另一个可见/隐藏的DIV。

$('form')
.each(function(){
    $(this).data('serialized', $(this).serialize())
})
.on('change input', function(){
    $(this)             
        .find('input:submit, button:submit')
            .prop('disabled', $(this).serialize() == $(this).data('serialized'))
    ;
 })
.find('input:submit, button:submit')
    .prop('disabled', true);

有人可以提供样品。我没有留下的头发了: - )

3 个答案:

答案 0 :(得分:1)

您复制的答案并不是很好,因为form没有changeinput个事件。相反,Form个元素会这样做。因此,将事件绑定到表单中的实际元素。除了您需要存储state存储/当前数据是否彼此相等然后采取相应行动之外,其他一切看起来都不错。看看基于状态隐藏/显示div的演示。

$('form')
.each(function() {
    $(this).data('serialized', $(this).serialize())
})
.on('change input', 'input, select, textarea', function(e) {
    var $form = $(this).closest("form");
	var state = $form.serialize() === $form.data('serialized');    
	$form.find('input:submit, button:submit').prop('disabled', state);
    
    //Do stuff when button is DISABLED
    if (state) {
        $("#demo").css({'display': 'none'});
    } else {
        //Do stuff when button is enabled
        $("#demo").css({'display': 'block'});
    }

    //OR use shorthand as below
    //$("#demo").toggle(!state);
})
.find('input:submit, button:submit')
.prop('disabled', true);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
    <input name="tb1" type="text" value="tbox" />
    <input name="tb2" type="text" value="tbox22" />
    <input type="submit" value="Submit" />
</form>

<div id="demo" style="margin-top: 20px; height: 100px; width: 200px; background: red; display: none;">Data isn't the same as before!</div>

剩下的工作可以通过CSS使用:disabled选择器(CSS3)或任何适当的选项来完成。

答案 1 :(得分:0)

change input事件发生变化检测 您可以将代码更改为以下内容,以便使用此计算值:

$('form')
.each(function(){
    $(this).data('serialized', $(this).serialize())
})
.on('change input', function(){
    var changed = $(this).serialize() != $(this).data('serialized');
    $(this).find('input:submit, button:submit').prop('disabled', !changed);

    // do anything with your changed
 })
.find('input:submit, button:submit')
    .prop('disabled', true)

如果您想与其他div合作,那就太好了。但是,对于样式,最好使用CSS :disabled选择器:

例如,在CSS文件中:

[type='submit']:disabled {
    color: #DDDDDD;
}

[type='submit']:disabled {
    color: #CCCCCC;
}

答案 2 :(得分:0)

您可以使用css更改按钮的悬停样式。 CSS有hover状态来定位:

[type='submit']:disabled {
    color: #ddd;
}

[type='submit']:disabled:hover {
    background-color: grey;
    color: black;
    cursor: pointer;
    border: none;
    border-radius: 3px;
}

[type='submit']:disabled {
    color: #ccc;
}

为了展示和隐藏,有许多技巧可以做到。我认为以下是最简单的技巧,而且更容易理解。

在您的HTML中添加

<div id="ru" class="hide">this is russia</div>
<div id="il" class="hide">this is israel</div>
<div id="us" class="hide">this is us</div>
<div id="in" class="hide">this is india</div>

在您的css中添加

.hide { 
    display: none; 
    background: red;;
}

更新您的javascript,如下所示:

$('form').bind('change keyup', function () {

   .....

    // get id of selected option
    var id = $("#country-list").find(":selected").val();
    $('.hide').hide(); // first hide all of the divs
    $('#' + id).show(); // then only show the selected one

    ....
});

这是工作jsfiddle。如果这不是你想要的,请告诉我,我会更新答案。