【问题标题】:$(this) selector works in jsfiddle but not on my script [closed]$(this) 选择器适用于 jsfiddle 但不适用于我的脚本 [关闭]
【发布时间】:2015-03-30 22:44:58
【问题描述】:

参见 jsfiddle 示例...http://jsfiddle.net/nnmEY/21/

目标...

通过选择菜单或直接输入修改 textarea 并将 textarea 值传递给 div。

问题...

1.) 下面示例底部的脚本在 jsfiddle 中可以正常工作,但在示例中却不行。

2.) 我还试图找出第一个脚本的最佳逻辑,即在将值从 .ta(textarea) 传递到 .tatx(div text) 时如何将“\n”转换为“br”。当您在选择菜单中选择三个或更多选项时,您可以看到问题。我正在考虑 replaceWith() 但我无法使其工作。

非常感谢任何帮助。

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<style>
    li {margin-bottom:7px; background:#DDD; padding:5px;}
    #par {width:350px;}
    .tatx {color:#C00;}
</style>

<div id="par">
<ul>

<li>
Select an option, then, select another option.<br>
<select class="sl">
    <option value="item 1">option 1</option>
    <option value="item 2">option 2</option>
    <option value="item 3">option 3</option>
</select><br>
<p>Selected options values are passed to textarea<br>
<textarea class="ta"></textarea>
<p>Textarea value is passed to div as text
<div class="tatx">Div Text</div>
</li>
<li>
Select an option, then, select another option.<br>
<select class="sl">
    <option value="item 1">option 1</option>
    <option value="item 2">option 2</option>
    <option value="item 3">option 3</option>
</select><br>
<p>Selected options values are passed to textarea<br>
<textarea class="ta"></textarea>
<p>Textarea value is passed to div as text
<div class="tatx">Div Text</div>
</li>
<li>
Select an option, then, select another option.<br>
<select class="sl">
    <option value="item 1">option 1</option>
    <option value="item 2">option 2</option>
    <option value="item 3">option 3</option>
</select><br>
<p>Selected options values are passed to textarea<br>
<textarea class="ta"></textarea>
<p>Textarea value is passed to div as text
<div class="tatx">Div Text</div>
</li>

</ul>
</div>

<script>
$(document).ready(function(){
    $('li > .sl').on('change', function() {
    var taVal = $(this).siblings().find('.ta').val();
    var tatxVal = $(this).siblings('.tatx').html()
    var slVal = $(this).val() + '\n';
    var slHtml = $(this).val() + '<br>';
    $(this).siblings().find('.ta').val(slVal + taVal);
    $(this).siblings('.tatx').html(slHtml + taVal);
});
});
</script>
<script>
$(document).ready(function(){
    $('li > .ta').keyup(function(){
        $(this).next('.tatx').html($(this).val());
    })
});
</script>

【问题讨论】:

  • .ta 不是.sl 的兄弟
  • @RichardA 他的代码在哪里说.ta.sl 是兄弟姐妹? .find('.ta') 寻找后代,而不是兄弟姐妹。
  • @Barmar 哦,是的,也是。我错过了。
  • 如果它适用于 jsfiddle 但不适用于您的网站,则您必须做一些不同的事情。但是我们无法知道您在做什么不同。
  • 在jsfiddle例子中;如果您在 textarea 中输入,则会更新 div。在我发布的示例代码中,当您输入文本区域时,它不会更新 div,您可以看到脚本是相同的。为了澄清......我想使用选择菜单或直接将文本输入到文本区域来更新 DIV 文本。选择菜单有效,在 textarea 中手动输入数据无效。

标签: jquery this argument-passing replacewith


【解决方案1】:

其实 jsfiddle 示例没有任何问题。您输入错误。因此它称为未定义。也许,这就是你的意思?

这是你的脚本,它运行良好:

<div id="par">
    <ul>
        <li>
            <p>Selected options values are passed to textarea</p>
            <select class="sl">
                <option value="item 1">option 1</option>
                <option value="item 2">option 2</option>
                <option value="item 3">option 3</option>
            </select>
            <br />
            <br />
            <p>Selected options values are passed to textarea</p>
            <textarea class="ta"></textarea>
            <div class="tatx">Div Text</div>
        </li>
        <li>
            <p>Selected options values are passed to textarea</p>
            <select class="sl">
                <option value="item 1">option 1</option>
                <option value="item 2">option 2</option>
                <option value="item 3">option 3</option>
            </select>
            <br />
            <br />
            <p>Selected options values are passed to textarea</p>
            <textarea class="ta"></textarea>
            <div class="tatx">Div Text</div>
        </li>
        <li>
            <p>Selected options values are passed to textarea</p>
            <select class="sl">
                <option value="item 1">option 1</option>
                <option value="item 2">option 2</option>
                <option value="item 3">option 3</option>
            </select>
            <br />
            <br />
            <p>Selected options values are passed to textarea</p>
            <textarea class="ta"></textarea>
            <div class="tatx">Div Text</div>
        </li>
    </ul>
</div>

<script>
    $(document).ready(function () {
        $("li > .ta").keyup(function () {
            $(this).next('.tatx').html($(this).val());
        })
    });
</script>
<script>
    $(document).ready(function () {
        $('li > .sl').on('change', function () {
            var taVal = $(this).siblings().find('.ta').val();
            var tatxVal = $(this).siblings('.tatx').html();
            var slVal = $(this).val() + '\n';
            var slHtml = $(this).val() + '\n'+'<br />';
            $(this).siblings().find('.ta').val(slVal + taVal);
            $(this).siblings('.tatx').html(slHtml + tatxVal);
        });
    });
</script>

要查看演示,请再次查看here。或jsfiddle

【讨论】:

  • 感谢 Jean 抽出时间。当我错过错别字时,我讨厌它。
  • 是的,有时候,我也打错了..这是人类..保持乐观和精神
  • 我从脚本中删除了 .find(),它现在同时更新了 textarea 和 div。再次感谢。
  • 给有兴趣的人的最后一条评论。我将第一个脚本中的 next() 更改为兄弟姐妹,并且所有工作都按预期进行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多