Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据jQuery表单下拉列表中选择的内容验证不同字段?_Javascript_Jquery_Validation - Fatal编程技术网

Javascript 根据jQuery表单下拉列表中选择的内容验证不同字段?

Javascript 根据jQuery表单下拉列表中选择的内容验证不同字段?,javascript,jquery,validation,Javascript,Jquery,Validation,我有以下代码来验证sharepoint newform.aspx上的一些字段。若要不在sharepoint中提交表单,我必须向默认函数PreSaveItem返回错误语句 验证: //bind a change event to all controls to validate $("input[title=Target Date],input[id$=UserField_hiddenSpanData],input[title=Start Date],select[title=Strate

我有以下代码来验证sharepoint newform.aspx上的一些字段。若要不在sharepoint中提交表单,我必须向默认函数PreSaveItem返回错误语句

验证:

//bind a change event to all controls to validate
    $("input[title=Target Date],input[id$=UserField_hiddenSpanData],input[title=Start Date],select[title=Strategic Objective],select[title=Strategic 

Priority]").change(function(){
        checkControls()
    });

    //the change event function - check the status of each control
    function checkControls(){

    //set a variable to count the number of valid controls
    var controlsPassed = 0;

    //set up a selector to pick .each() of the target controls
    $("input[title=Target Date],input[id$=UserField_hiddenSpanData],input[title=Start Date],select[title=Strategic Objective],select[title=Strategic 

Priority]").each(function(){

        //if the control value is not zero AND is not zero-length
        var txt = $('#ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl00_UserField_hiddenSpanData').val();
        var val = $(this).val();
        if($(this).is(':hidden') || (val != 0 && val.length != 0 && txt.length != 0)) { 

            //add one to the counter
            controlsPassed += 1;
        }

        });

    //call the PreSaveItem function and pass the true/false statement of 5 valid controls

return (controlsPassed == 5) 

    }
        function PreSaveItem() {
            return checkControls()
    }
我想根据我在名为Item Level的下拉列表中选择的内容来验证不同的元素

我通过以下方式从项目级别获取值:

$("select[title='Item Level']").change(function() {
        var itemLevel = $(this).val();      
        if (itemLevel == "Strategic Objective") {


        alert(itemLevel);
        }
        if (itemLevel == "Strategic Priority") {


        alert(itemLevel);
        }
        if (itemLevel == "Milestone Action") {


        alert(itemLevel);
        }
        if (itemLevel == "Performance Measure") {


        alert(itemLevel);
        }

        });
我认为将验证代码扔进if很容易,但它不起作用

例如:

        $("select[title='Item Level']").change(function() {
        var itemLevel = $(this).val();      
        if (itemLevel == "Strategic Objective") {


        alert(itemLevel);
        }
        if (itemLevel == "Strategic Priority") {


        alert(itemLevel);
        }
        if (itemLevel == "Milestone Action") {
        //bind a change event to all controls to validate
    $("input[title=Target Date],input[id$=UserField_hiddenSpanData],input[title=Start Date],select[title=Strategic Objective],select[title=Strategic 

Priority]").change(function(){
        checkControls()
    });

    //the change event function - check the status of each control
    function checkControls(){

    //set a variable to count the number of valid controls
    var controlsPassed = 0;

    //set up a selector to pick .each() of the target controls
    $("input[title=Target Date],input[id$=UserField_hiddenSpanData],input[title=Start Date],select[title=Strategic Objective],select[title=Strategic 

Priority]").each(function(){

        //if the control value is not zero AND is not zero-length
        var txt = $('#ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl00_UserField_hiddenSpanData').val();
        var val = $(this).val();
        if($(this).is(':hidden') || (val != 0 && val.length != 0 && txt.length != 0)) { 

            //add one to the counter
            controlsPassed += 1;
        }

        });

    //call the PreSaveItem function and pass the true/false statement of 5 valid controls

return (controlsPassed == 5) 

    }
        function PreSaveItem() {
            return checkControls()
    }


        alert(itemLevel);
        }
        if (itemLevel == "Performance Measure") {


        alert(itemLevel);
        }

        });
在项目层面,项目战略目标验证了其他一些要素。有什么想法吗

提前谢谢

编辑:卡萨布兰卡帮助下的工作代码:

function checkControls() {
  var itemLevel = $("select[title='Item Level']").val();
  switch (itemLevel) {
    case 'Strategic Objective':

    var controlsPassed = 0;

    $("input[id$=UserField_hiddenSpanData]").each(function(){

        var txt = $('#ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField_hiddenSpanData').val();
        var val = $(this).val();
        if(val != 0 && val.length != 0 && txt.length != 0) { 

            //add one to the counter
            controlsPassed += 1;
        }

        });
        return (controlsPassed == 1) 

    case 'Milestone Action':

      var controlsPassed = 0;

    $("input[title=Target Date],input[id$=UserField_hiddenSpanData],input[title=Start Date],select[title=Strategic Objective],select[title=Strategic 

Priority]").each(function(){

        var txt = $('#ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField_hiddenSpanData').val();
        var val = $(this).val();
        if($(this).is(':hidden') || (val != 0 && val.length != 0 && txt.length != 0)) { 

            //add one to the counter
            controlsPassed += 1;
        }

        });
        return (controlsPassed == 5) 

    case 'Performance Measure':

        var controlsPassed = 0;

    $("select[title=Strategic Objective],select[title=Strategic Priority]").each(function(){

        var val = $(this).val();
        if(val != 0 && val.length != 0) { 

            //add one to the counter
            controlsPassed += 1;
        }

        });
    return (controlsPassed == 2) 

case 'Strategic Priority':

        var controlsPassed = 0;

    $("input[title=Target Date],input[id$=UserField_hiddenSpanData],input[title=Start Date],select[title=Strategic Objective]").each(function(){

        var txt = $('#ctl00_m_g_c6ae303a_6013_4adb_8057_63a214bcfd24_ctl00_ctl04_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_UserField_hiddenSpanData').val();
        var val = $(this).val();
        if($(this).is(':hidden') || (val != 0 && val.length != 0 && txt.length != 0)) { 

            //add one to the counter
            controlsPassed += 1;
        }

        });
    return (controlsPassed == 4) 

  }
}

function PreSaveItem() 
    {
            return checkControls()
    }

好的,这就是我在您当前脚本中看到的问题:绑定事件处理程序是永久性的,因此如果您选择“里程碑操作”一次,然后切换到另一个选项,您仍然会验证原始选择

您可以取消所有
更改
处理程序,而是直接在
检查控件
中添加条件,根据当前选择验证必要的元素。我还将您的
if
替换为
开关,因为它更干净:

function checkControls() {
  var itemLevel = $("select[title='Item Level']").val();
  switch (itemLevel) {
    case 'Strategic Objective':
      // Perform validation for this item level
      return result; // true or false

    case 'Milestone Action':
      // Perform validation for this item level
      return result; // true or false

    // etc...
  }
}
更新:例如,如果选择了“里程碑行动”,您希望检查某个文本字段是否为空,然后在
案例“里程碑行动”:
下添加如下内容:

if ($('something').val().length > 0)
  return true;
else
  return false;


编辑:如果您有权访问表单代码(我不熟悉SharePoint),您应该为表单元素分配ID,这样您就可以像
$(“#itemLevel”)
一样引用它们,而不必使用长选择器。

您好,卡萨布兰卡,谢谢您,但我不太确定如何修改我的代码?谢谢,我现在明白了。至于选择器,我没有访问表单代码的权限,但我可以向每个元素添加一个带有jQuery的类。我还用现在的最终代码更新了我的问题。