更改验证消息并在下拉菜单上禁用按钮更改

时间:2015-12-15 09:41:50

标签: javascript jquery

我有以下代码:

$("#solDate").change(function () {
    if ($(this).val().trim() == '') {
        $("#solvedBy").val('Pick an option');
     }
     else {
         $("#solvedBy").val('Please, pick the issue solver');
     }
});

$("#solvedBy").change(function () {
    if ($(this).val() == 'Please, pick the issue solver') {
    //if (document.getElementById("solvedBy").valueOf == 'Please, pick the issue solver') {
        $("#saveBtn").attr('disabled', true);
        $("#slvByValMsg").text('You have solution date and no solver');
    }
    else {
        $("#saveBtn").attr('disabled', false);
        $("#slvByValMsg").text('');;
    }
});

solDate是日期文本框,而solvedBy是一个下拉菜单。这两个脚本都可以很好地工作,但是当我尝试用第一个脚本触发第二个脚本时,它会中断。

简而言之,顺序是:当人们选择解决方案日期时,在下拉菜单中选择文本'请选择问题解决方案'出现。发生这种情况时,按钮应该被禁用,并且应该出现错误消息,直到此人选择解算器。

当我将solveBy设置为'请选择问题解决者'时,该命令有效。当我设置日期时,solveBy的值会更改,但第二个脚本不会执行(我认为它不会将其识别为更改)。注释行也没有帮助。

2 个答案:

答案 0 :(得分:1)

您的代码应该像

$("#solDate").change(function () {
    if ($(this).val().trim() == '') {
        $("#solvedBy").val('Pick an option');
     }
     else {
         $("#solvedBy").val('Please, pick the issue solver');
     }
     //do change event of solvedBy here will solve issue
     $("#solvedBy").change();
});

$("#solvedBy").change(function () {
    if ($(this).val() == 'Please, pick the issue solver') {
    //if (document.getElementById("solvedBy").valueOf == 'Please, pick the issue solver') {
        $("#saveBtn").attr('disabled', true);
        $("#slvByValMsg").text('You have solution date and no solver');
    }
    else {
        $("#saveBtn").attr('disabled', false);
        $("#slvByValMsg").text('');;
    }

});

答案 1 :(得分:1)

您只需要调用.change()方法。

  

注意:使用JavaScript更改输入元素的值,例如使用.val(),不会触发事件。

有关.val()未自动调用.change()的原因,请参阅此answer

$("#solDate").change(function () {
    if ($(this).val().trim() == '') {
        $("#solvedBy").val('Pick an option').change();
     }
     else {
         $("#solvedBy").val('Please, pick the issue solver').change();
     }
});