通过单选按钮或jquery的表单独占性选择会议会话

时间:2019-04-13 05:56:59

标签: php jquery html laravel forms

我的应用程序允许组织创建具有多个轨道的会话的事件。这些轨道不必是100%对称的(请参见下面的示例图像)。

我需要这样做,以便单个会话可能会重叠多个会话时间,并具有互斥性-选择关系。

form example

在此示例中,如果注册人当前(从1-5pm开始)选择Workshop会话,则该表单将阻止从1-2:30pm选择会话。

我已经简单地做到了这一点,只需在下午1点开始的那3个会话中使用单选按钮的名称,都使用相同的名称即可。

理想情况下,它还应阻止从3-4:30pm选择会话。

我不能使用相同的解决方案(在下午3点开始的会议使用相同的名称),因为那样会阻止注册人在下午1点和下午3点参加另一个会议(不选择从下午1-5点进行研讨会)。

我的会话表的相关字段如下:

sessionID int
trackID int
eventID int
sessionName varchar
confDay int
start datetime
end   datetime
order int

如何在没有大量代码的情况下达到预期的结果?

呈现此表单的代码可以在jsfiddle.net上看到。

1 个答案:

答案 0 :(得分:0)

由于没有得到答案,我最终以不确定的方式解决了这个问题。当我向一些同事兜售想法时,他们理解了问题,我的解决方案想知道是否还有其他更优雅的方法,但我承认该解决方案可以解决问题。

我欢迎其他方法。希望对其他人有帮助。

我将上面的会话设置称为“非对称”,因为音轨在相同的时间上并没有全部具有相同的会话数。

会话表中的相关列在原始问题中列出。为了启用此解决方案,添加了以下字段:

isLinked int

注意1::isLinked为0或未删除会话的sessionID,该会话ID应该通过单选按钮显示在会话列表中。

注意2:为“重叠”的已删除和未删除会话设置了isLinked。

我有一个循环,在Conference_days中循环,然后跟踪,然后进行会话(每天最多5个)。通过事件设置界面,用户可以软删除不相关的会话。

在该用户界面中,用户还指定会话是否将与其他会话重叠,如果这样,则使用户也可以为同一轨道中已删除的会话设置该字段。

然后通过以下伪代码简化用于会话选择的UI,以生成html和javascript以模拟所需的行为:

foreach($conference_days as $day){

    foreach($tracks as $track){

        for($so=1;$so<=5;$so++){
        // $so = session_order

            grab the session for the current $day, track ID, and $so

            if(not soft-deleted && !isLinked) {  // isLinked == 0
                display as normal with all details + radio button

            } elseif(not soft-deleted && isLinked) {
                display as normal with all details + radio button
                also add javascript that when above radio button is selected
                    a variable* number of to-be-created, hidden, radio buttons 
                    (below) are also selected; 
                    *count the isLinked sessions with same ID that are soft-deleted

            } else {
                display nothing, but...
                output a radio button with style.visiblity=hidden named in a 
                    predictable way based on $day, $track, and $so
                add javascript that to monitor changes to the radio selection in 
                this row so it auto-deselects the visible radio button above.
            }
        }
     }
 }