html/javascript:按钮的ID正在更改(?)

html/javascript:按钮的ID正在更改(?),javascript,php,html,Javascript,Php,Html,在我的网页上,我有两个按钮,它们都会返回一个不同的“确认”弹出窗口,具体取决于按下的按钮 守则: <form action = "markascomplete.php" method = "post" onsubmit = "return validateForm();"> echo '<tr><td><button id = "btnComplete" style = "submit" class = "btn btn-success" name =

在我的网页上,我有两个按钮,它们都会返回一个不同的“确认”弹出窗口,具体取决于按下的按钮

守则:

<form action = "markascomplete.php" method = "post" onsubmit = "return validateForm();">

echo '<tr><td><button id = "btnComplete" style = "submit" class = "btn btn-success" name = "btnComplete" value = "btnComplete">Voltooi deze taak</button></td></tr>';
echo '<tr><td><button id = "btnDeComplete" style = "submit" class = "btn btn-danger" name = "btnDeComplete" value = "btnDeComplete">Markeren als onvoltooid</button></td></tr>';

function validateForm()
{
    var btnMark = document.getElementById( 'btnMark' );
    var btnActive = document.getElementById( 'btnActive' );
    var btnComplete = document.getElementById( 'btnComplete' );
    var btnDeComplete = document.getElementById( 'btnDeComplete' );

    alert( btnDeComplete.value );

    var sConfirmText = "";
    var sAlertText = "";

    if( btnMark )
    {
        //alert( btnMark.value );
        sConfirmText = "Test1";
        sAlertText = "Test2";
    }
    else if( btnActive )
    {
        //alert( btnActive.value );
        sConfirmText = "Test3";
        sAlertText = "Test4";
    }
    else if( btnComplete )
    {
        alert( btnComplete.value );
        alert( 'btncomplete' );
        sConfirmText = "Test5";
        sAlertText = "Test6";
    }
    else if( btnDeComplete )
    {
        alert( btnDeComplete.value );
        alert( 'btndecomplete' );
        sConfirmText = "Test7";
        sAlertText = "Test8";
    }

    if( confirm( sConfirmText ) )
    {
        alert( sAlertText );
        return true;
    }
    else
        return false;
}

echo“Voltooi deze taak”;
回音“Markeren als on voltooid”;
函数validateForm()
{
var btnMark=document.getElementById('btnMark');
var btnActive=document.getElementById('btnActive');
var btnComplete=document.getElementById('btnComplete');
var btndeplete=document.getElementById('btndeplete');
警报(btndeplete.value);
var sConfirmText=“”;
var sAlertText=“”;
如果(BTN标记)
{
//警报(btnMark.value);
sConfirmText=“Test1”;
salertext=“Test2”;
}
else if(b活动)
{
//警报(btnActive.value);
sConfirmText=“Test3”;
salertext=“Test4”;
}
否则如果(BTN完成)
{
警报(btnComplete.value);
警报('btncomplete');
sConfirmText=“Test5”;
salertext=“Test6”;
}
否则如果(btnDeComplete)
{
警报(btndeplete.value);
警报('btndeplete');
sConfirmText=“Test7”;
salertext=“Test8”;
}
如果(确认(sConfirmText))
{
警报(sAlertText);
返回true;
}
其他的
返回false;
}
那么当你按下这些按钮时会发生什么,它会给你一个值为btndeplete的警报,显示两个带有“Test”的警报+被按下按钮的给定数量

现在,当您按下按钮btnComplete时,会收到以下警报: B完成 B完成 测试5 测试6

按下按钮btnDeComplete时,您会收到以下警报: B完成 B完成 测试5 测试6

请注意,它们都是相同的,并且是第一个“alert(btndeplete.value);”返回btnComplete而不是btnDeComplete。 我没有改变代码中任何地方的ID或值,我只是在创建按钮的地方设置ID、名称和值

所有其他按钮都可以正常工作


有人能帮我解决这个问题吗?

因为您正在运行一系列if条件,它正在运行第一个匹配true的代码。它不执行前两个if条件中的代码,因为这些元素不存在,因此btnActive和btnComplete变量为null或false,因此if条件失败,这些元素的代码不执行

javascript的顶部只是使用getElement将这些元素(如果它们存在于文档中)分配给变量,而按下哪个按钮并没有什么区别,因为它们都调用相同的函数

在函数中,您可以使用this.id获取所按下按钮的id


希望这能有所帮助:)

我将用一个一般场景来详细说明

<form action = "markascomplete.php" id="frmMarks" method = "post">

echo '<tr><td><button id = "btnComplete" style = "submit" class = "btn btn-success btnClick" name = "btnComplete" data-option="Success" value = "btnComplete">Voltooi deze taak</button></td></tr>';
echo '<tr><td><button id = "btnDeComplete" style = "submit" class = "btn btn-danger btnClick" name = "btnDeComplete" data-option="Delete" value = "btnDeComplete">Markeren als onvoltooid</button></td></tr>';

</form>

echo“Voltooi deze taak”;
回音“Markeren als on voltooid”;
编辑:

    <script>
     $('.btnClick').on('click',function(){
    var sConfirmText = "";
    var sAlertText = "";
    var sDataOption = $(this).attr("data-option");

if( sDataOption == "btnMark" )
{
    alert( 1 );
    sConfirmText = "1";
    sAlertText = "1";
}
else if( sDataOption == "btnActive" )
{
    alert( 2 );
    sConfirmText = "2";
    sAlertText = "2";
}
else if( sDataOption == "btnComplete" )
{
    alert( 3 );
    sConfirmText = "3";
    sAlertText = "3";
}
else 
{
    alert( 4 );
    sConfirmText = "4";
    sAlertText = "4";
}

if( confirm( sConfirmText ) )
{
    alert( sAlertText );
    $('#frmMarks').submit();
}
else
    return false;
});
    </script>

$('.btnClick')。在('click',function()上{
var sConfirmText=“”;
var sAlertText=“”;
var sDataOption=$(this.attr(“数据选项”);
如果(sDataOption==“btnMark”)
{
警报(1);
sConfirmText=“1”;
salertext=“1”;
}
else if(sDataOption==“btnActive”)
{
警报(2);
sConfirmText=“2”;
salertext=“2”;
}
否则如果(sDataOption==“BTN完成”)
{
警惕(3);
sConfirmText=“3”;
salertext=“3”;
}
其他的
{
警惕(4);
sConfirmText=“4”;
salertext=“4”;
}
如果(确认(sConfirmText))
{
警报(sAlertText);
$('frmMarks')。提交();
}
其他的
返回false;
});
编辑


根据我从你的粘贴箱链接中看到的,你又错过了一条
=
登录
else if
语句,我想将你上一条
else if
语句转换为我在编辑中显示的
else
语句。检查一下这是否有效。还有一个建议,您可以使用
开关
大小写,而不是
if-else
,当您要进行多次检查时,它的性能会更好。

如果我想使用这个.id,我需要将函数中的按钮指定为参数,对吗?因为我尝试使用this.id,但它返回“undefined”,只需在按钮中添加一个html5 data-*属性,单击后获取它,并根据它进行区分。@GuruprasadRao这样所有按钮都可以具有相同的id,我可以将data-*值更改为我需要的任何值,对吗?编辑:在PHP中可以调用data-*值吗?为不同的控件使用一个id是一个非常糟糕的主意,不建议这样做。因此,我要说的是为所有按钮保留一个类或添加一个更常见的类,然后单击该类获取data-*属性,并基于该属性进行操作。编辑:您是否以任何方式使用jQuery?如果是,我可以给你一个更好的答案。但我不知道你是怎么做到的php@GuruprasadRao是的,我也在使用jQuery,我会尝试按照你的建议去做,但也请发布jQuery解决方案。学习新事物总是好的:)当然。我将发布解决方案:)编辑:顺便说一下,我找不到表单的结束位置以及表单包含的其他控件。我将发布一个通用的解决方案,在点击特定的按钮时在模式上加载特定的文本。我已经尝试了这段代码,但我仍然遇到和以前一样的问题,除了现在它一直在调用“btnActive”。编辑:jQuery部分在块中,我不明白。。这里的btnActive在哪里??请给我一个完整的场景!!看看pastebin链接哇,我现在觉得很尴尬,因为我已经看到我做错了什么。这确实是问题所在,谢谢你的帮助!还有,有多少if语句是一个更适合使用的switch语句?这些小错误发生在每个程序员身上,很难识别:)我的感觉是,如果你有2或m