頁(yè)面上一個(gè)按鈕,有個(gè)onclick事件,點(diǎn)擊觸發(fā)js,發(fā)送ajax請(qǐng)求到後臺(tái),後臺(tái)經(jīng)過(guò)一系列判斷,返回url到j(luò)s
<a class="a" id="k_id" href="javascript:void(0);" onclick="test($(this),id1,id2);"></a>
function test(){
//發(fā)送ajax請(qǐng)求...返回一個(gè)url
var url = "ajax請(qǐng)求返回的url";
//js操作將返回的url賦值到頁(yè)面上的a標(biāo)簽,然后js模擬a標(biāo)簽點(diǎn)擊事件
$(oElement).attr("href",url);
$(oElement).removeAttr("onclick");
var id = $(oElement).attr("id");
document.getElementById(id).click();//這里點(diǎn)擊a標(biāo)簽
//這樣的操作會(huì)被瀏覽器攔截,
}
求解
擁有18年軟件開(kāi)發(fā)和IT教學(xué)經(jīng)驗(yàn)。曾任多家上市公司技術(shù)總監(jiān)、架構(gòu)師、項(xiàng)目經(jīng)理、高級(jí)軟件工程師等職務(wù)。 網(wǎng)絡(luò)人氣名人講師,...
你可以直接跳到該url吧,為啥要模擬點(diǎn)擊, 直接 window.location.href = url
onclick監(jiān)聽(tīng)了click事件,這樣就先觸發(fā)呼叫test方法,一直重複呼叫了,一直觸發(fā)不了herf跳轉(zhuǎn)
發(fā)送ajax之後,不用模擬a標(biāo)籤點(diǎn)擊事件,直接location.href = 需要跳轉(zhuǎn)的url 就可以了
跳轉(zhuǎn)頁(yè)時(shí),沒(méi)有必要去除 a
的 onclick
事件;
需要去除的話當(dāng)前方式直接 t.onclick = null;
即可
<a class="a" id="k_id" href="javascript:void(0);" onclick="test(this)">123123</a>
function test(t) {
var url = "http://www.baidu.com";
t.setAttribute("href", url);
t.onclick = null;
t.click();
}
可以試試看
新開(kāi)頁(yè):window.location.href = url;
新開(kāi)視窗:window.open(url);
a標(biāo)籤有預(yù)設(shè)的click事件,估計(jì)onClick與預(yù)設(shè)事件衝突了。
是因?yàn)橛?strong>非同步操作,瀏覽器會(huì)攔截 window.open()
。
可以把 ajax 改成同步,或是想辦法前端計(jì)算 url。