2013-11-01 47 views
0

當我加載頁面selText首先運行()只經過兩次點擊運行,然後它工作正常,但如果刷新頁面,我需要再次單擊兩次jQuery函數經過兩次點擊

<a href="javascript: selText();" class="select">click</a> 
<input type="text" value="value" /> 

<a href="javascript: selText();" class="select">click</a> 
<input type='text' value='value' /> 

<a href="javascript: selText();" class="select">click</a> 
<input type="text" value="value" /> 




function selText() { 
     $(".select").click(function() { $(this).nextUntil("a").select(); }); 
    } 

回答

0

這是因爲當你添加

function selText() { 
    $(".select").click(function() { $(this).nextUntil("a").select(); }); 
} 

然後單擊錨鏈接,會發生什麼情況,在第一時間,是功能結合click事件到「.select」元素。這就是爲什麼第一次點擊沒有做任何事情的原因。但之後的點擊將按預期工作。上述代碼的不利影響是,您綁定的是單擊事件中實際執行相同操作的多個函數(綁定的函數的數量等於您單擊錨標記的次數)

答案是,你需要把

$(".select").click(function() { $(this).nextUntil("a").select(); }); 

$(document).ready(function(){ 
..// your code here 
}); 
+0

感謝您的詳細解釋 – Egor

+0

我的榮幸。如果您的問題得到解答,您可以對問題解答或標記爲已回答,:-) –

+0

我找不到答案:)) – Egor

0

代碼放在

$(document).ready(function() { 
    $(".select").click(function (e) { 
     e.preventDefault(); 
     $(this).nextUntil("a").select(); 
    }); 
}); 
+0

謝謝它的工作原理 – Egor

+0

算了,請投了它和/或它標記爲答案,如果幫你。 –

0

您正在註冊點擊處理程序,它在點擊處理程序上調用select方法,因此當第一次點擊發生時沒有處理程序來選擇元素,但它只是註冊將執行選擇的處理程序。當第二次點擊發生時,您將有2個處理程序用於單擊事件一個selText,第二個處理程序由第一個註冊。但是當你第三次點擊select()時,代碼將被調用兩次。

因此,在你的情況下,解決方案是刪除內聯處理程序,並在dom就緒回調中註冊點擊處理程序,如下所示。

<a href="#" class="select">click</a> 
<input type="text" value="value" /> 

<a href="#" class="select">click</a> 
<input type='text' value='value' /> 

<a href="#" class="select">click</a> 
<input type="text" value="value" /> 

然後

jQuery(function() { 
    $(".select").click(function (e) { 
     $(this).nextUntil("a").select();, e.preventDefault() 
    }); 
}) 
0

我不知道爲什麼,但在我的項目的一些看法,上面的代碼不工作,我必須做到以下幾點

$(document).ready(function() { 
    $(document).on('click', '.tabl-red', function (e) { 
     e.preventDefault(); 
     $(this).nextUntil("a").select(); 
    }); 
}); 

也許它可以幫助別人