【问题标题】:MooTools: How can I replace existing field text with text insert?MooTools:如何用文本插入替换现有字段文本?
【发布时间】:2013-10-08 14:25:52
【问题描述】:

我已经使用这个有一段时间了,但到目前为止没有运气,但是我确实使用 mootools 的代码让表情符号完全正常工作。

基本上,我有一个现有的领域

<input type="text" class="post_action_input" value="Say Something..." id="emoticons_insert" />

下面的图片包含

<img onClick="javascript:$('blove2').fancyShow();" src="./images/user_status_emoticon.jpg" width="25" height="25" />

这会触发包含此表情符号 DIV 的下拉菜单,将 :alien: 文本插入到上面的字段中

<div id="blove2"><a href="javascript:;" onClick="InsertText('emoticon1','emoticons_insert'); return false;"><img src="./images/smiley/alien.png" alt="" onClick="javascript:$('blove2').fancyHide();" /></a></div>

<div id="emoticon1" style="display:none;"> :alien: </div>

而且效果很好。然而,真正让我们的用户感到困惑的是,我们的输入字段包含“Say Something”,在点击时消失,在外部点击时重新出现等。当他们点击表情符号时,它会附加并产生“Say Something...:alien:”和帖子就是这样。如何在单击表情符号时保留 :alien: 文本的同时完全清除“Say Something...”?我们正在使用 MooTools 1.2。

字段插入Javascript:

<script type="text/javascript">
function get(id) {
    return document.getElementById(id);
}

function contentHTML(id, m) {
    var obj = get(id),
        op = '';
    if (m) {
        op += obj.innerHTML;
    } else if (!m) {
        op += (!obj.innerText) ? obj.textContent : obj.innerText;
    }
    return (op);
}

function InsertText(input, output) {
    var text = contentHTML(input, true);
    var ele = get(output);
    ele.value += text;
}
</script>

表情下拉 JavaScript:

<script type="text/javascript">
window.addEvent('domready', function() {
    Element.implement({
        fancyShow: function() {
            this.fade('in');
            this.setStyle('display', '');
        },
        fancyHide: function() {
            this.fade('out');
            this.setStyle('display', 'none');
        }
    });
    //$('element').fancyHide(); // FREEZES STATUS INPUT FIELD FOR SOME REASON
});
</script>

换句话说,onClick insert 如何从字段中替换“Say Something...”,并成功插入:alien:?非常感谢你们!

【问题讨论】:

  • 您是否尝试删除 insertText 函数的ele.value += text; 中的+?这清除了“说点什么”。顺便说一句,完成这个小提琴,这样它就更清楚你有什么jsfiddle.net/D7aZp
  • 好的,如果没有 + ,它是否可以正常工作?例如 jsfiddle.net/D7aZp/4
  • 我已经更新了小提琴。您的建议有效,但我怎样才能保留他们输入的文字,并在输入文字中插入表情符号,但仍替换“Say Something...”?

标签: javascript forms replace mootools field


【解决方案1】:

这是一个建议,代码更少。 在这个建议中,我使用 Mootools 的 OverText,而不是你的内联 onfocus/onclick/onblur/value,这将不起作用。 OverText 带有 Mootools More,在小提琴中我使用了 mootools 1.3。

HTML

<input type="text" class="post_action_input" title="Say something..." id="emoticons_insert" />
<img onClick="javascript:$('blove2').fancyShow();" src="/images/user_status_emoticon.jpg" width="25" height="25" />
<div id="blove2">
    <img src="/images/smiley/alien.png" data-name=":alien:" class="emoticon" alt="" />
</div>

Mootools

function InsertText(input, output) {
    var ele = document.id(output);
    ele.value += input;
    ele.fireEvent('change');
}
window.addEvent('domready', function () {
    Element.implement({
        fancyShow: function () {
            this.fade('in');
            this.setStyle('display', '');
        },
        fancyHide: function () {
            this.fade('out');
            this.setStyle('display', 'none');
        }
    });
    // Labels over the inputs.
    document.getElements('input').each(function (el) {
        new OverText(el);
    });
    document.getElements('.emoticon').addEvent('click', function () {
        var icon_name = this.get('data-name');
        InsertText(icon_name, 'emoticons_insert');
        this.getParent().fancyHide();
    });
});

演示here

【讨论】:

  • 重叠文本,“Say Something..”仍然没有,没有被表情符号值取代。这就是问题所在。
  • @CodyTapping,用ele.fireEvent('change'); 更新演示,以防你先按表情。首先打字已经在努力隐藏“说点什么......”
  • 您好。不好意思回复迟了。是的,我已经成功测试了它。有一些问题,但它是很棒的代码,并且增加了我们对 MooTools 的持续支持,我很感激!
  • @CodyTapping,如果您需要更多帮助,请告诉我。否则请点击接受此答案。很高兴我能帮上忙!
  • 我没有 15 声望,但就我个人而言,这是一个公认的答案。谢谢。
猜你喜欢
  • 2023-03-28
  • 2021-02-26
  • 2017-07-05
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
相关资源
最近更新 更多