2017-08-17 48 views
1

更使我發現了一個腳本,當你想,在這裏它是一個可以生成你的鏈接(學分店主!)讓一個按鈕submittable不止一次

function CreateAffiliateLink(F) { 
 
    var findstring = "XXXXX"; 
 
    var ts = 'var replacewith=document.' + F.name + '.AffCode.value'; 
 
    eval(ts); 
 
    if (replacewith.length < 1) { 
 
    return; 
 
    } 
 
    var re = new RegExp(findstring, "g") 
 
    for (i = 0; i < F.length; i++) { 
 
    var s = new String(F.elements[i].value); 
 
    if (s.length > 0) { 
 
     var newstr = s.replace(re, replacewith); 
 
     F.elements[i].value = newstr; 
 
    } 
 
    } 
 
}
<form name="me"> 
 
    <p> 
 
    Type your affiliate code in the box and click the button: 
 
    <input type="text" name="AffCode" size="17"> 
 
    <input type="button" value="Personalize links with my affiliate code" onClick="CreateAffiliateLink(this.form)"> 
 
    </p> 
 
    <p> 
 
    Image link:<br> 
 
    <textarea name="a" cols="46" rows="3" wrap="off"> 
 
    <a href="http://example.com/master/#XXXXX 
 
    <img src="http://example.com/image.jpg"> 
 
    </a> 
 
    </textarea> 
 
    </p> 
 
    <p> 
 
    An ezine text link:<br> 
 
    <input type="text" name="b" size="46" value="http://example.com/master/#XXXXX"> 
 
    </p> 
 
</form>

但權現在,當我使用它時,每次我想要提供新的價值時都必須刷​​新。我想找到一種方法,可以在不刷新頁面的情況下多次生成。

我試着編輯它的一部分,但它仍然只能用一次。有沒有辦法改變它?

+0

爲什麼你需要'的eval()'? 'var replaceWith = document [F.name] .AffCode.value;' – Barmar

+0

實際上,你甚至不需要那麼多。 'var replaceWith = F.affCode.value;' – Barmar

+0

我沒有看到替換鏈接的代碼中的任何內容。它取代了'F.elements [i] .value','.value'只存在於輸入字段中,而不是鏈接。你的意思是'F.elements [i] .href'? – Barmar

回答

2

這是因爲findstring始終爲'XXXXX'(它會查找值,點擊後會發生變化)。

替換舊代碼:

var findstring = "XXXXX"; 
function CreateAffiliateLink(F) { 
    var replacewith = F.AffCode.value; 
    if (replacewith.length < 1) return; 
    var re = new RegExp(findstring, "g") 
    for (i = 0; i < F.length; i++) { 
     var s = F.elements[i].value.toString(); 
     if (s.length > 0) { 
      var newstr = s.replace(re, replacewith); 
      F.elements[i].value = newstr; 
      findstring = replacewith; 
     } 
    } 
} 
+0

這很有效,除非你的聯盟代碼已經存在於url中,比如「example」,在這種情況下,它將替換example.com中的「example」。 – James

1

,因爲它看起來在URL XXXXX和替換它只能使用一次的原因,與子公司代碼。但是在您替換之後,該網址不再有XXXXX

使用更一般的正則表達式,該表達式將與URL中的master/#匹配,並替換後面的所有內容。

function CreateAffiliateLink(F) { 
 
    var replacewith=F.AffCode.value; 
 
    if (replacewith.length < 1) { 
 
    return; 
 
    } 
 
    replacewith = 'master/#' + replacewith; 
 
    var re = /master\/#\w+/g; 
 
    for (i = 0; i < F.length; i++) { 
 
    var s = new String(F.elements[i].value); 
 
    if (s.length > 0) { 
 
     var newstr = s.replace(re, replacewith); 
 
     F.elements[i].value = newstr; 
 
    } 
 
    } 
 
}
<form name="me"> 
 
    <p> 
 
    Type your affiliate code in the box and click the button: 
 
    <input type="text" name="AffCode" size="17"> 
 
    <input type="button" value="Personalize links with my affiliate code" onClick="CreateAffiliateLink(this.form)"> 
 
    </p> 
 
    <p> 
 
    Image link:<br> 
 
    <textarea name="a" cols="46" rows="3" wrap="off"> 
 
    <a href="http://example.com/master/#XXXXX"> 
 
    <img src="http://example.com/image.jpg"> 
 
    </a> 
 
    </textarea> 
 
    </p> 
 
    <p> 
 
    An ezine text link:<br> 
 
    <input type="text" name="b" size="46" value="http://example.com/master/#XXXXX"> 
 
    </p> 
 
</form>