1

入力テキスト フィールドから入力された値を id のリンクに追加しようとしています。私はここまでstackoverflowを検索しましたが、idが機能しません!

<script type="text/javascript">
 jQuery(function(){
   $("#txt_name").keypress(function() {
     var value = $("#txt_name").val();
     });
   $("a#coupon_link").attr("href", function(i) {
      return href + '&discount_code='.text(value); 
      });
});
</script>

そして、これはhtmlがどのように見えるかです

<form>
  <fieldset>
    <input id="txt_name" type="text" value="discount" />
  </fieldset>
</form>
<a id="coupon_link" href="https://www.e-junkie.com/ecom/gb.php?c=cart&i=XXXXXX&cl=YYYYYY&ejc=2" target="ej_ejc" class="ec_ejc_thkbx" onClick="javascript:return EJEJC_lc(this);"><img src="http://www.e-junkie.com/ej/ej_add_to_cart.gif" border="0" alt="Add to Cart"/></a>
4

8 に答える 8

3

あなたはおそらくこれを意味しました:

$(function() {
   $("#coupon_link").on('click', function(e) {
      e.preventDefault(); // apparently not needed
      location.href = $(this).attr('href') + '&discount_code=' + encodeURIComponent($('#txt_name').val());
   });
});

#txt_nameキーを押したときに値を更新する必要はありません。リンクが押されたときにのみ値を使用する必要があります。

于 2012-11-23T16:32:21.983 に答える
2

次のようにコードを修正します。

$(function(){
   $("#txt_name").keypress(function() {
     var value = $("#txt_name").val();
     var link = $("#coupon_link");
     var originalHref = link.attr('originalHref');
     if (!originalHref) {
          originalHref = link.attr("href");
          link.attr("originalHref", originalHref)
     }
     link.attr("href", originalHref + '&discount_code='+value);
   });
});

注意すべき点:

  • ID で要素をターゲットにしている場合は、セレクターに何も追加しないでください
  • あなたの値変数は同じスコープにありませんでした
  • の戻り値はval直接連結できるため、テキストに変更する必要はありません
  • あなたの場合、attrに関数を渡す必要はありません
  • キーストロークごとに href を大きくしようとしています。これは悪い考えです。私が提案する解決策は、元の href を保持することです
  • 元の href にまだいくつかのパラメーターがあるかどうか (つまり、'?' があるかどうか) がわからない場合は、テストする必要があります (私はそれを行います)。

全体的に、よりクリーンな解決策は、リンクを変更することではなく、リンクをクリックして href を構築することです。

$("#coupon_link").click(function(e) {
   location = this.href + '&discount_code=' + $('#txt_name').val();
});
于 2012-11-23T16:27:42.663 に答える
1

よくわかりませんが、スコープの問題のように見えますが、次の JavaScript を試してください。

<script type="text/javascript">
 jQuery(function(){
   var value = 0;
   $("#txt_name").keypress(function() {
       value = $("#txt_name").val();
       $("a#coupon_link").attr("href", function(i) {
          return href + '&discount_code=' + encodeURIComponent(value); 
        });
    });
});
</script>
于 2012-11-23T16:27:03.723 に答える
0

これを試して:

jQuery(function(){
    $("#txt_name").keypress(function() {
        var value = $("#txt_name").val();
        $("a#coupon_link").attr("href", '&discount_code=' + String(value));
    });
});
于 2012-11-23T16:30:43.273 に答える
0

キープレスイベントがトリガーされる前に関数が呼び出されると、href が変更されないため、これは機能しません。keypress を blur に置き換えることを検討し、blur() が呼び出されたときに href を更新します

于 2012-11-23T16:33:38.157 に答える
0

ページの読み込み時だけでなく、キーが押されたときにおそらく href を変更する必要があります。そのためには、次のように keyup 関数内で href を置き換える必要があります。

$(function(){
    var link = $("a#coupon_link");
    link.data('href', link.attr("href"));

    $("#txt_name").on('keyup', function() {
        link.attr("href", link.data('href') + '&discount_code='+ this.value); 
    });
});

何度も追加しない&discount_code=***ように、元の href を data 属性などのどこかに保存する必要があります。

于 2012-11-23T16:27:51.040 に答える
0

これが必要だと思います:

<script type="text/javascript">
 $(function(){
   $("#txt_name").keypress(function() {
     var value = $("#txt_name").val();
      $("a#coupon_link").attr("href",href+'&discount_code='+value.toString);
    });

});
</script>

href その var がどこにあるのかわからないのを見てください。必要な場合は、それを削除してください。

于 2012-11-23T16:28:17.567 に答える