0

我有一个观点和一个元素。在我的 cakephp 代码中,我第一次在我的视图中使用了该元素,它按预期工作。但是我想在接下来的两次以相同的视图形式使用相同的元素,并且它根本不起作用。这是我的看法:

<div class="add form">
<?php echo $this->Form->create('add name', array('class'=>'form-horizontal'));?>
<fieldset>
<legend>
<?php echo __('Add Name'); ?>
</legend>
<?php
echo $this->Form->input('name');
echo $this->Form->input('numeric_id');
echo $this->Form->input('parent_id', array('options' => $parents));
?>
<div>
<?php echo $this->element('editortoolbar'); ?>
<?php echo $this->Form->label('Your Description');?>
    <div id="editor" contenteditable=true></div>
</div>
<?php echo $this->Html->script('hotways'); ?>
<?php echo $this->Html->script('welsubs'); ?>
<?php echo $this->Html->script('application');?>
<?php echo $this->Form->hidden('description',array('id'=>'desc'));?>
<!-- == EDITOR END == -->
<hr>
</fieldset>
<?php echo $this->Form->button(__('Submit'), array('class'=>'btn btn-primary'));?>
<?php echo $this->Form->end();?>
</div>
<script>
    $('#editor').live('keyup',function () {
    var value = $(this).html();
    $('#desc').attr("value",value);
}).keyup();
</script>

现在这是我想以同样的形式重复使用两次用于另一种不同类型的描述的代码部分。

<?php echo $this->element('editortoolbar'); ?>
    <?php echo $this->Form->label('Your Description');?>
        <div id="editor" contenteditable=true></div>
    </div>
    <?php echo $this->Html->script('hotways'); ?>
    <?php echo $this->Html->script('welsubs'); ?>
    <?php echo $this->Html->script('application');?>
    <?php echo $this->Form->hidden('description',array('id'=>'desc'));?>

editortoolbar 是我的元素,有各种按钮。这是代码的屏幕截图: 在此处输入图像描述

现在这个工具栏适用于所有 id='editor' 的 div。但在这种形式中,我想将此工具栏用于 3 个 div。而且我没有任何方法可以做到这一点。

任何想法或任何建议请帮助。

4

1 回答 1

0

好吧,您正在将操作附加到一个 id,而 id 显然可以只包含一个元素。

<script>
    $('#editor').live('keyup',function () {
        var value = $(this).html();
        $('#desc').attr("value",value);
    }).keyup();
</script>

这仅适用于元素的一个实例。如果您计划使用多个元素,则需要以另一种方式识别它们。我可以根据类给你一个建议,但你需要根据它应该做什么来调整 javascript 执行的操作。

向元素添加类标识符

<?php echo $this->element('editortoolbar'); ?>
<?php echo $this->Form->label('Your Description');?>
    <!-- here, add the class -->
    <div class="editorclass" contenteditable=true></div>
</div>

并将脚本更改为类似

<script>
    $('.editorclass').live('keyup',function () {
        var value = $(this).html();
        $('#desc').attr("value",value);
    }).keyup();
</script>

现在,您有一个#desc引用也不起作用,因为它是由 id 引用的。所以你可以通过做同样的事情来解决这个问题,改变类的 id,但是你需要找到一种方法来将编辑器类与描述保持在一起。对于这种情况,我通常做的是计算具有相同类的元素,识别被引用元素的索引,并用相同的索引修改另一个类(在这种情况下是描述)。在您的情况下,它将类似于

<script>
    $('.editorclass').live('keyup',function () {
        var value = $(this).html();
        $('.descclass').eq($('.editorclass').index($(this))).attr("value",value);
    }).keyup();
</script>

但我还没有测试,所以你需要调整那个功能。哦,你也需要改变这部分

<?php echo $this->Form->hidden('description',array('class'=>'descclass' ));?>
于 2013-06-26T13:42:00.073 回答