【问题标题】:Changing Img Src based on value entered in a Textfield根据文本字段中输入的值更改 Img Src
【发布时间】:2012-05-29 01:42:19
【问题描述】:

我需要帮助创建具有以下内容的表单

  1. TEXTFIELD(将用于输入 7 位型号)
  2. 图像占位符(将根据 url 更改图像占位符的 src,例如它将变为 src="http://yourwebsite.com/product/TEXTFIELD.jpg)

  3. 我需要以某种方式从产品的 url 中获取 H1 标签值

#3 仍未解决!

真的很绝望需要任何类型的帮助。 我已经用谷歌搜索了一整天真的需要帮助。 谢谢你 !

我在下面有一些代码可以帮助可视化我正在寻找的内容。 如果您需要澄清或我有点困惑,请与我联系。

<form name="form1" method="post" action="">
       <p>7-digit product#
         <input type="text" name="model" id="model">
       </p>
       <p>
         <input name="start" type="hidden" id="start" value="http://www.mywebsite.com/Products/">
       </p>
       <p>
         <input name="end" type="hidden" id="end" value=".jpg">
       </p>
       <p><img name="proudctimage" src="=#start#model#end" width="32" height="32" alt=""></p>
     </form>

<script>
    var model_input = document.getElementById('model');
    var start = document.getElementById('start');
    var end = document.getElementById('end');
    var image = document.getElementsByTagName('img');

    model_input.onkeyup = function(e){
       image[0].src = start.value + model_input.value + end.value;
    }
</script>

~编辑于 2012 年 5 月 29 日上午 9:00~


  1. 如果您按回车键,在文本字段中输入的值将被删除
  2. 我需要一种方法来获取使用相应 URL 存储在 H1 标签中的产品描述(URL 是在文本字段中输入的型号,但使用的 url 结构与过去使用的结构略有不同抓取图片,见下文...http://mywebsite.com/ProductDetails.aspx?productid=TEXTFIELD) ***我应该注意,用于获取 H1 数据的 URL 将是“跨域”并且不一定在某个域上。我读到 jquery 可能不会在跨域上发出请求

【问题讨论】:

    标签: javascript jquery dynamic image textfield


    【解决方案1】:

    您可以使用 Jquery 轻松做到这一点。

    http://www.jquery.com 获取 Jquery 的副本,或者通过将其粘贴到您的 head 部分来使用 CDN 版本:

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    

    这是一个简化版:

    如果你的 URL 的开始和结束部分不会改变,你可以简化你的表单:

    ​<form>
        <label>Model Num</label>
        <input type="text" name="model" id="model" />
        <input type="button" value="Update Image" id="update" />
    </form>
    <img src="" />
    

    ​ 然后使用下面的Jquery代码,可以检测到点击更新按钮,从文本框中抓取代码并将图片src属性改为

    http://mysite.com/products/typed_code_here
    

    只需将 jquery 代码(和脚本标签)粘贴到您的 head 部分

    <script>
        ​$(document).on('click','#update',function(){
            $('img').attr('src','http://mysite.com/product/'+$('#model').val()+'.jpg');
        });​​​​​​
    </script>
    

    如果您想在不使用 Jquery 的情况下执行此操作,并且您的 html 必须保持如上,您可以将以下内容与原始 html 一起使用(注意代码中的拼写错误):

    <script>
        var model_input = document.getElementById('model');
        var start = document.getElementById('start');
        var end = document.getElementById('end');
        var image = document.getElementsByTagName('img');
    
        model_input.onkeyup = function(e){
           image[0].src = start.value + model_input.value + end.value;
        }
    </script>
    

    onkeyup 事件可以根据您想要更新图像的方式更改为模糊、更改等。我建议使用一个按钮,以便用户在他们认为代码有效时可以更新图像。

    更新

    以下 github 项目在使用 jQuery 的跨域 html 请求方面取得了进展。 https://github.com/padolsey/jQuery-Plugins/tree/master/cross-domain-ajax/

    基本上,您只需要通过 ajax (jQuery.ajax()) 获取产品页面,然后在 ajax 回调中您必须扫描返回的 HTML 中的 h1 元素。最终,跨域 ajax 是一种设计模式,并且有与之相关的最佳实践。为了一个 h1 元素而抓取整个 HTML 页面并不是很有效。如果您引用的网站不是您自己的,请考虑修改您的方法并确保检查任何版权法/条款和条件。

    【讨论】:

    • 虽然您的帖子不错,但您的代码和示例与 OP 的代码有偏差。您应该尝试在与 OP 问题相同的背景下回答问题。
    • 谢谢 tjscience,你是对的。不确定您是否在我的编辑之前或之后阅读了我的答案。我根据开始和结束值不会改变从而减少 HTML 的建议提供表单的简化。正如您所说,取决于 OP 的上下文:)
    • Brad 我喜欢为修复我的请求中的图像抓取部分而提供的解决方案。我需要调整 onkey 行为对用户按 Enter 时的反应方式。我将假设使用 ipad 的人可能会按 Enter 键并假设继续进入下一个字段,然后之前输入的产品编号就会消失。您知道我如何根据产品的 url 获取位于

      标签之间的产品值吗?

    • @BradBarrow Brad 你知道我如何从产品的 URL 中获取 h1 标签信息吗?我想根据您提供的内容继续工作。非常感谢我的朋友!
    【解决方案2】:

    如果你使用 jquery,你可以这样做:

    $(function () {  
        $('#model').change(function () {
            $('img[name="productimage"]').attr('src', $('#start').val() + $('#model').val() + $('#end').val());
        });
    });
    

    【讨论】:

    • 如果您需要在输入文本时进行更新,而不仅仅是从输入中移除焦点后,您可以使用keyup() 而不是change()
    • 是的,你可以使用 keyup(),但是对于每个不正确的图像 url,你都会得到 js 错误。
    • 您不会收到 javascript 错误,但您会收到 404 not found request 错误。当然,使用的最佳功能取决于您的响应能力要求。如果认为没有用,每次击键都轮询服务器是过度的。
    • @tjscience 感谢您抽出宝贵时间回复,非常感谢您帮助我解决列表中关于获取产品 url 的 h1 标签中包含的数据的第 3 个问题
    【解决方案3】:

    在您的 html 中隐藏div。假设

    <div id="loadSource"></div>
    
       $('#model').blur(function () {
            var modelVal = $.trim(this.value),
                startVal = $.trim($('#start').val()),
                endVal = $.trim($('#end').val());
            if( modelVal &&  startVal && endVal) {
               var imgUrl = startVal + modelVal + endVal,
                   siteUrl = startVal + modelVal;
               $('img[name="productimage"]')
                .attr('src', );
    
               // process to get h1 tag
    
               $('#loadSource').load(''+ siteUrl +' h1', function() {
                      console.log( $('#loadSource h1').text() );
               });
            }
        });
    

    【讨论】:

    • 感谢您抽出宝贵的时间回复,非常感谢您帮助我解决列表中关于获取产品 url 的 h1 标签中包含的数据的第 3 个问题
    • @user1422641 你的h1 标签在哪里
    • 会根据我发布的新问题选择工作,还是会为 h1 标签中的描述创建一个附加字段
    • @thecodeparaodx 代码不起作用,也没有通过输入的产品 url 和型号从 h1 标签中提取图像或提供数据。我复制并粘贴了您的解决方案并替换了旧脚本。我假设您希望我在
      之后围绕脚本标签 封装代码
    猜你喜欢
    • 1970-01-01
    • 2017-12-30
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多