拖放破坏ID编号方案


Drag 'n Drop Destroys ID Numbering Scheme?

我有一个web应用程序,其中包括一个问卷编辑器。可能会有很多问题;每个问题都有很多答案;每个问题都有两组单选按钮,用于设置各种问题选项。

我使用以下样式的id:

id="Q-$questionNumber"
id="Q-$questionNumber-A-$answerNumber"

…其中"$questionNumber"answers"$answerNumber"被替换为相应的数字。

ID编号方案有两个功能:

  • 当一个元素被点击时,我的javascript可以检查ID号来找出它属于哪个问题/答案。
  • 输入元素的名称遵循相同的编号方案。当提交表单时,我的PHP代码可以通过检查名称来确定所提交的值与哪个问题号/答案号相关联。
当然,当我拖放一个问题时,所有这些id和名称都需要重新编号。我已经写了javascript/jQuery,成功地重新编号一切,并正确工作。但感觉很笨拙。

似乎我可以从所有id中删除编号方案,只是通过使用jQuery检查其在DOM中的位置来确定问题编号/答案编号。但是,似乎我仍然需要在输入元素名称上使用编号方案,以便服务器上的PHP代码可以告诉各种提交的表单元素属于什么问题编号/答案编号。

有更好的方法吗?

UPDATE每个请求从Bankzilla。下面是一些HTML示例。这是一个问题。每个文档可以有许多问题,每个问题可以有许多答案。

<div id="Q-1" class="QuestionGroup ui-draggable">
    <br>
    <h2 id="QuestionText-Q-1">
        Question #1&nbsp;&nbsp;
        <input type="text" name="questionText-Q-1" value="" id="questionText-Q-1" class="questionText" maxlength="256" size="70">
    </h2>
    <div class="containerForAnswers">
        <p class="answerswerPar">
            <span class="answerswerLabel answerLabelinEditView">#1:</span>
            <input type="text" name="Q-1-A-1" value="" id="Q-1-A-1" class="answerswer answer-Q-1" maxlength="256" size="70">
        </p>
        <p class="answerswerPar">
            <span class="answerswerLabel answerLabelinEditView">#2:</span>
            <input type="text" name="Q-1-A-2" value="" id="Q-1-A-2" class="answerswer answer-Q-1" maxlength="256" size="70">
        </p>
        <p class="answerswerPar">
            <span class="answerswerLabel answerLabelinEditView">#3:</span>
            <input type="text" name="Q-1-A-3" value="" id="Q-1-A-3" class="answerswer answer-Q-1" maxlength="256" size="70">
        </p>
    </div>
</div>

不确定这是否有帮助,但实际上您可以在输入中使用数组。使结构化问题/答案在你的情况下更容易,你不必担心编号。

<input name="Q[1][text]"/>
<input name="Q[1][answers][]" value="number 1"/>
<input name="Q[1][answers][]" value="number 2"/>

当你有多个Q[1][answers][]时,它会像数组索引一样堆叠它们,0,1,2,3,4

如果你要把上面的内容转储出来,它看起来会像

var_dump($_POST);
array(
    'Q' => array(
        1 => (
            'text' => '',
            answers => array(
                0 => 'number 1'
                1 => 'number 2'
            )
        )
    )
)

现在,当您拖放时,您只需要找到问题id是什么,而不是答案的顺序。

在研究了这一点之后,我想我可能会在下次尝试这样的事情:将问题编号/答案编号标识符完全排除在所有表单元素名称和id之外。提交表单时,问题号/答案号标识符将通过jQuery添加到所有表单元素中。这样,我就不必在拖放、插入、剪切/粘贴等过程中处理任何问题号/答案号标识符的重新编号。