導航:首頁 > 源碼編譯 > click源碼分析

click源碼分析

發布時間:2022-09-27 04:44:53

Ⅰ HTML如何阻止事件冒泡求源碼分析

原以為span不同於input,事件冒泡會被父級標簽吞噬,寫了個測試事件冒泡的Demo,發現並不是想得那樣。另外:event.stopPropagation()以及event.stopImmediatePropagation()並不能阻止span冒泡到a標簽中,而簡單粗暴的return false卻可以。

1<!DOCTYPEhtml>
2<html>
3<head>
4<title>Bubbling</title>
5<styletype="text/css">
6*{
7font-size:30px;
8}
9div{
10border:1pxbluesolid;
11}
12span{
13border:1pxbluesolid;
14}
15</style>
16<scripttype="text/javascript">
17functionsetforeColor(sender){
18sender.style.color="red";
19}
20
21functionsetbgColor(sender){
22sender.style.background="green";
23returnfalse;
24}
25</script>
26</head>
27<body>
28<div>
29<spanonclick="setforeColor(this)">spantag</span>indiv
30</div>
31<br>
32<div>
33<inputtype="button"value="Button"onclick="setforeColor(this)"/>indiv
34</div>
35<br>
36<ahref="https://www..com"style="text-decoration:none;display:block;">
37<spanonclick="setforeColor(this);returnfalse">spantag</span>inanchor
38</a>
39<br>
40<ahref="https://www..com"style="text-decoration:none;display:block;">
41<spanonclick="setbgColor(this)">spantag</span>inanchor
42</a>
43</body>
44</html>

Ⅱ 急求java代碼的詳解析 bt_9.setOnClickListener(new OnClickListener(){ public void onClick(View v){ str

Button19.setOnClickListener(new View.OnClickListener() {//添加一個OnClickListener介面的匿名實例/對象
public void onClick(View v) {//當click事件發生時會調用這個onclick方法
// TODO Auto-generated method stub
if (str_result!=""){//1:判斷字元串是否與空串常量的內存地址相同,凡是在源代碼中出現的"xxxxx",統統屬於全局靜態常量。字元串比較千萬別用「==」「!=」。
double b = Double.parseDouble(str_result);
//2:把str_result的字元串轉為double類型的數據
str_result = ""+b*b;
//3:把str_result設為b的平方。""+<數值型> ——〉轉為字元串類型
entry.setText(String.valueOf(str_result));
//4:把entry的顯示文字設為str_result,也即原來的輸入的數字的平方。String.valueOf用得有點多餘。
}
}
}

//以下的看來是對上面那段毛病代碼的修正。
if(str_oper.equals("*")){//對代碼1的修正,這才是判斷字元串內容是否相同。
g=Double.parseDouble(str_display.toString());//跟代碼2一個意思,只是轉換的對象是一個字元串緩沖區里的字元串。這里不明白為什麼要使用字元串緩沖區。
str_result=String.valueOf((b*g));
//等價於代碼3。兩者都對。
entry.setText(str_result);
//等價於代碼4。
str_display=new StringBuffer("");
//為str_display開辟一個新的字元串緩沖區。字元串緩沖區的作用是避免每一次字元串拼接修改都得new一個字元串對象。這里是干嗎用的,由於沒看到完整程序,不清楚。

Ⅲ javascript調用數組的問題

第一頁:第四課介紹
對於Java script來說有兩個主要部分:該語言本身及其目
標庫。在第2課介紹的語法中,我們已經研究了變數,語句
和if-then子句,這些是所有程序設計語言的組成部分。現在來
學習Java script語法的其餘部分。

對於Java script語法來說,我們僅剩下三個問題需要學習:
循環、數組和函數。

讓我們從循環開始。

第二頁:循環介紹

有時你想反復做同一件事。你想向某些人詢問一個口令,你不
斷地問,直到得到正確的口令。如果你只想給他們兩次嘗試的
機會,你可以這么做:

var the_password = "pass the wrench";

var answer = prompt("What's the woyd?","");

if (answer != the_password) {

answer = prompt("What's the woyd?","");

if (password != the_password) {

document.write("You lose!<p>");

} else {

document.write("That's right!<p>");

}

} else {

document.write("That's right!<p>");

}

不幸的是如果你想不住地問直到得到正確答案,上述做法是不
起作用的。假使你是想詢問四次而不是兩次,那這已經是很討
厭的事了。你將使用四個層次的if-then 子句,這決不是件好事。

反復做相似的事情的最好方法是使用一個循環(loop)。在這種
情況下,你可以用一個循環來不斷的要求口令直到這個人說出
為止。這里有一個while循環工作的例子,口令是:pass the
wrench。

第三頁:循環的密碼

那就是密碼!

讓我們逐行地來研究這個例子,如果你想看整個答案,可以查看源碼。

在這個典型的Java script序言之後,我們從雙變數申報開始:

var password="pass the wrench";

var answer;

這里我們定義該密碼作為一個字元串,我們申報一個稱為
answer的變數。你將理解為什麼我們不得不立即申報一
個answer。下面幾行是非常重要的:

while (answer != password)

{

answer = prompt("What's the woyd?","");

}

這是一個while循環。while 循環的一般格式為:

while (some test is true)

{

do the stuff inside the curly braces

}

上述幾行表明:「當answer不等價於Password時,執行提示
命令。」這一循環將持續地執行波形括弧內的語句直至測試
失敗。在使用者輸入的單詞與密碼一致(即Pass the wrench)的
情況下,測試必將失敗。

由於在對一個未申報的變數執行一個如(answer!=password)的
測試時,在某些瀏覽器上會產生錯誤,所以我們必須申
報answer。由於在while循環中將通過提示方案對answer賦值,
在我們第一次進行循環中,answer將沒有數值。提前定義它並
設定其處始值為「」。

由於不定義循環經常地使用,循環經常用來執行一組語句某一
特定的次數。這里用另一個循環來演示如何作這項工作。

第四頁:再談WHILE循環

我們已見到了很多所請求的X`S,現在復習一下:

第一步:請求X`S的數目

var width = prompt("How many x's would you like? (1-10 is
good)","5");

下一步,申報一些變數:

var a_line="";

var loop = 0;

現在,關鍵之處:

while (loop < width)

{

a_line = a_line + "x";

loop=loop+1;

}

即說:「當變數循環小於所請求的X`S行寬時,在該行加入另一
X然後在循環值上加1。」該循環將繼續加一X到該行並在循環值
上加1直到循環不在小於請求的行寬。請看下列源碼分析:

第一次
a_line = "" (because we initialized it to be "")
loop=0 (because we initialized it to be 0)
width=2 (because that's what the user asked for)
0 is less than 2 so
a_line = a_line + "x", so now a_line = "x"
loop=loop+1, so now loop = 1
返回循環:第二次
loop=1
width=2
a_line = "x"
1 is less than 2 so
a_line = a_line + "x", so now a_line = "xx"
loop=loop+1, so now loop = 2
返回循環:第3次
loop=2
width=2
a_line = "xx"
2 is NOT less than 2 so
fall out of the loop and do what follows
隨後是:

alert(a_line);

啟動一個警告對話框。

這種循環運用的如此普遍以至於程序員們開發了一些簡便
方式,條件循環可寫成這樣:

while (loop < width)

{

a_line += "x"; //this was a_line = a_line + "x";

loop++; //this was loop=loop+1;

}

首行,「x」,表示「本身加x」。若已有a_number=5,那麼可
寫成,a_number+=3,即是說:a_number=a_number+3。程序員
就是這么偷懶的。

下行,loop++,意味著「自身加1」。於是loop++即為:
loop=loop=1。它也可寫成loop+=1。這樣偷懶行為非常有效。

就象不止一種方式在一個數上加1一樣,也有不止一種方法來寫
一個循環。While循環不是唯一的循環模式,另一流行的循環
是for循環。

第五頁:For循環

上例中while循環可以寫成如下形式:

var a_line="";

var loop = 0;

while (loop < width)

{

a_line = a_line + "x";

loop=loop+1;

}

也可用For Loop寫成:

var a_line="";

for (loop=0; loop < width; loop++)

{

a_line = a_line + "x";

}

for循環的格式為:

for (initial value; test; increment)

{

do this stuff;

}

這樣,上述for loop設置loop=0並持續加1直到loop<width,這
和上例中while loop相同,僅是少了數行而已。都表示
「在a_line上加width次x」。

在我們練習使用循環之前應明白一件事:循環可以嵌套。這里
有一個關於嵌套循環的例子。

第六頁:嵌套循環

這是程序:

var height = prompt("How high do you
want the grid? (1-10 is good)","10");

var width= prompt("How wide do you want
the grid? (1-10 is good)","10");

var a_line;

var new_window =
window.open("/webmonkey/98/04/files1a
/grid.html","looper","width=400,height=400");

new_window.document.writeln("<h1>A Grid</h1>");

for (height_loop = 0; height_loop
< height; height_loop++)

{

a_line = "";

for (width_loop = 0;
width_loop < width; width_loop++)

{

a_line+="x";

}

new_window.document.writeln
(a_line + "<br>");

}

在請求高及寬後,打開一新窗口,並為它寫一個頭,進入for
循環。第一個for循環設a_line=「」。試一下不用該行做一下
本例,看看會發生什麼。在初始化a_line後,程序進入下一個
for循環,當寬達到所需值後,建立X`S行並將它顯現在新窗
口中。這些將發生height次。

好,現在你的任務:看一下這個循環練習並親自試著在看源碼
前寫一個。

第七頁:循環練習

循環練習程序要求一些字然後反向顯示。試著自己寫一下程
序,再看源碼了解其原理。問題不大了吧,現在開始學習數組。

第八頁:數組

我們已了解變數可是數字、字元串及對象參數。還有一個
Javascript的重要部分:數組。

數組是一種列表。各種列表比如名單、URL以顏色列表都可以存
儲在數組中。

這里我們生成顏色的數組:

var colors = new Array("red","blue","green");

現在你就有了一個數組,你能對它做什麼呢?數組的優點在於
數組中的各個元素可以通過數字調用。第一個元素的數字是0,
可以用以下方式調用:

var the_element = colors[0];

執行這一行JavaScript指令時,變數the_element所被賦予的值
是字元串"red" 。通過寫出數組的名稱並將數組中元素的順序號
放在方括弧內就可調用數組中的該元素。數組中第2個元素的順
序號是1。

一旦生成數組後,你可以添加和修改數組值。如果你打算將顏
色數組的第1個元素有紅色該為紫色,你可以這樣做:

colors[0] = "purple";

數組經常用於循環。下文將講數組和循環的應用。

第九頁:數組和循環

數組是一項非常有用的東西,因為你可以循環調用數組中的各
個元素執行某項功能。以下是循環顯示一個URL數組中的各個元素
的例子。

首先,要使該例子發揮作用,我們需要聲明一些變數:

var url_names = new Array("hits.org","awaken.org","bianca.com");

var a_url;

接下來,我們循環調用數組中的各個元素,打開每
個URL並對待用戶點擊alert框的OK按鈕:

for (loop = 0; loop <url_names.length; loop++)

{

// make the name of a url, for example http://www.hits.org/

a_url = "http://www." + url_names[loop] + "/";

// open a window

var new_window=open(a_url,"new_window","width=300,height=300");

// wait for the click

alert("hit ok for the next site");

}

首先,你會注意到循環從0一直到url_names.length這個變數。
將.length放在數組名的後面由於告訴你數組中有多少個元素。
但是,注意數組元素的數目同數組最後一個元素的索引號(順
序號)不同。如果數組中有3個元素,則數組的長度為3,但是
數組中最後一個元素的索引號卻是array[2].。這是因為數組中
第1個元素的索引號是array[0].。如果你執行數組調用時得到
諸如"object not found" 的錯誤信息,而你的代碼中有一個
數組,則有可能是因為你將數組元素的索引號同數組中元素的
數目混淆了。

不也許還會注意到將.length放在數組的結尾處很有點想給一個
對象附加一些屬性。這是因為數組本身就是對象,而length就
是數組的一項屬性。

數組術語對象的另一個表現是:你需要用新指令才能生成新的
數組。在上例中,url_names = new Array(......) 實際可以
解釋為:生成一個新數組,用url_names對其做一個引用。你可
以注意到單詞"new" 以這種方式被應用時,就生成了一個新的
對象。

循環中的第1行生成一個變數。其賦值為一個字元串。

a_url = "http://www." + url_names[loop] + "/";

循環開始時,變數循環的初始值為0。url_names數組的第1個元
素是字元串"hits.org".,所以在第一次循環中,變數a_url等
值於字元串"http://www.hits.org/".。

循環的下一行用該URL打開一個窗口

var new_window=open(a_url,"new_window","width=300,height=300");

由於每次打開窗口時我們給窗口起的名稱都一樣,所以在轉到
新的URL時,不會打開許多窗口。如果我們在上例中去掉窗口
名稱"new_window",則每次循環時就會打開一個新窗口。

循環的第3行只是打開一個alert框,並對待用戶點擊OK 按鈕。

數組還可以由於其它元素,而不只是字元串。數組可以應用
於JavaScript文件對象模塊(Document Object Model)的各個
方面。>>

第十頁:文件目標模塊中的數組
下面是onClick=""鏈接中的代碼:

var change=prompt('Change which image (0 or 1)?','');

window.document.images[change].src='three.jpg';

本例打算用圖片交換來演示數組如何介入DOM的。如果你用的
是IE3.0或Netscape2.0,趕緊升級。試一下本例,看一下源碼。

document.image_name.src = 'some_image.gif';

為了做這事,每個圖片都需命名到。若你不知要交換的圖片
名,但卻知道其在HTML頁中的順序。可以用它的DOM數來指定該
圖片。

一個HTML文件中的第一個圖片是document.images[0],第二個
是document.images[1],如此類推。若你想知道一個文件中有
多少個圖片,你可檢查圖片數組長度知道:
document.imageslength。例如,你想改變你的網頁中所有圖形
為一個Spacer GLF圖片,你可以這樣做:

for (loop = 0; loop < document.images.length; loop++)

{

document.images[loop].src = 'spacer.gif';

}

清楚了吧?

好。下面我們准備三步是函數。函數學習中,我們要做一些
練習,並有一些作業。

進入函數學習課程。

第十一頁:函數

函數是編程需學的最後一個基本組成。所有的程序語言都是
函數。函數是一些角次可調用的、無須重寫的東西。

如果你想教會自己快速閱讀並且用一個一旦點擊可告訴你當前
時間的長文本鏈接。

例如…時間!

看源碼:

<a href="#" onClick="

var the_date = new Date();

var the_hour = the_date.getHours();

var the_minute = the_date.getMinutes();

var the_second = the_date.getSeconds();

var the_time = the_hour + ':' + the_minute + ':' + the_second;

alert('The time is now: ' + the_time);">time!</a>

在這里這段JavaScript的工作細節並不重要;一會我們再回來
復習一下。

重要的是它太長了。若這些時間鏈接再有10個,你須每次剪貼
這段程序。這使你的HTML既長且難看。另外,若你想改變這段
程序,就必須在10個不同地方改變。

你可以寫一個函數來執行而不用作10次拷貝程序。這里的函數
使用變的即容易編輯又容易閱讀。

請看如何寫一段計時函數。

第十二頁:無參數函數

該HTML頁含有一個叫做announceTime的函數。從一個鏈接調用
annoumnceTime:

<a href="#" onClick="announceTime();">time!</a>

就象這樣:

下行看起來就象第二課:

<a href="#" onClick="alert('Hello!');">Hello!</a>

這稱為從一個鏈接調用警告對話框。函數就象一種方法,唯一不
同的是,方法依附於一個對象。在這個警告的例子中,這個對象
是一個窗口對象。

讓我們回到函數本身。如果你看看源碼,你將看到函數位於HTML
文件的頭部中。

<html>

<head>

<title>Function with No Parameters</title>

<script langauge="JavaScript">

<!-- hide me

function announceTime()

{

//get the date, the hour, minutes, and seconds

var the_date = new Date();

var the_hour = the_date.getHours();

var the_minute = the_date.getMinutes();

var the_second = the_date.getSeconds();

//put together the string and alert with it

var the_time = the_hour + ":" + the_minute
+ ":" + the_second;

alert("The time is now: " + the_time);

}

// show me -->

</script>

</head>

<body>

...

</body>

</html>

好,讓我們逐行復習這個函數。首先,所有函數來自於該種格式:

function functionName(parameter list)

{

statements ...

}

函數的命名規則於變數差不多。第一個字元必須是字母或一標准符
號。其餘字元可為數字或一橫線。但必須保證函數不於已定義的變
量同名。否則將出現很糟糕的結果。我是用內部大寫的方式命名函
數以保證它們不與字元碰巧重名。

函數名後是一組參數。本例是無參數的函數,下一例中我們再舉例
描述。

參數後是函數的主體。這是一組當函數調用後是想運行的語句。在
下面幾個例子中,我打算利用這個報時器,所以讓我描述一下它是
怎樣工作的。

第一行:

var the_date = new Date();

取得一個新的日期對象。就象你在用數組時取得一個新的數組一
樣,在你要找出即時是什麼時間時你需要先取得一個日期對象。
當找到了一個新的日期對象,它自動重置到當前的日期和時間。
為了在對象以外得到這個信息,你必須使用這種對象方法:

這些方法從日期對象上取得了合適的數字。

var the_hour = the_date.getHours();

var the_minute = the_date.getMinutes();

var the_second = the_date.getSeconds();

你可能疑惑:我怎樣能假定日期對象知道何種方式?甚或我如何
知道有這樣一件事可作為日期對象?這些緣由應從Javascript
庫中獲取,我將盡我所能解釋內置Javascript對象,但不一定能
徹底的使你清楚。

函數的其他部分就很清楚了。它以這種方式調用返回數字,把它
們變成字元串,並且調用警告方式以彈出一個字元串對話框。注
意你可以在函數內部調用一個方式和函數。我們將詳盡討論。

現在如果你也玩透了時間鏈接,你可能注意到了有些什麼不對的
事。你每次可能會得到這樣的反饋:「12:12:04」,這是
getSecond()將返回值為「4」。那麼當你合成為時間時,你看到
的就是the_minute+「:」+the_second得到14:4而非是我們想要
的。解決它是個容易的事,需要個新的函數來修補分、秒合成值。

請看參數及返回值。

第十三頁:參數及返回值

盡管無參數的函數在減少寫源碼工作量,HTML源碼可讀性上很
有用,但有參數的函數會更為有用。

上一例中,當返回的分、秒值小於10時會有問題發生。我們想
要看到的秒值是04而非4。我們可以這樣做:

var the_minute = the_date.getMinutes();

if (the_minute < 10)

{

the_minute = "0" + the_minute;

}

var the_second = the_date.getSeconds();

if (the_second < 10)

{

the_second = "0" + the_second;

}

它會非常有效。但是注意,同樣的源碼你寫了兩次:若某件
東西小於10,則前面加「0」。所以要考慮當用同一代碼要多
次重寫時,用函數來做。本例中我寫了一個叫fixNumber的函數:

function fixNumber(the_number)

{

if (the_number < 10)

{

the_number = "0" + the_number;

}

return the_number;

}

fixNumber的參數是the_number。一個參數也是一個變數,當該
函數被調用時,其參數值也被設置。在本例中,我們這樣調用
函數:

var fixed_variable = fixNumber(4);

參數the_number在函數中設置為4。到現在你應該對fixNumber
的主體有了一定的了解。它的意思是:如果變數the_number小
於10,則在它的前面加一個0。這裡面新的內容是return指令:
返回the_number的值。在下面的情況中就會用到return指令:

var some_variable = someFunction();

變數some_variable的值是函數someFunction() 的返回值。
在fixNumber中,我加入: return the_number,則退出函數並
將返回the_number的值返回給任何一個等待被設置的變數。
所以,我這樣書寫代碼:

var fixed_variable = fixNumber(4);

the_number的初始值將通過函數調用被設置為4,然後由於4小
於10,所以the_number將被改為"04"。然後the_number值被
返回,而且變數fixed_variable將被設置為"04" 。

為了將fixNumber包括在原始函數announceTime()中,我添加了
如下內容:

function announceTime()

{

//get the date, the hour, minutes, and seconds

var the_date = new Date();

var the_hour = the_date.getHours();

var the_minute = the_date.getMinutes();

var fixed_minute = fixNumber(the_minute);

var the_second = the_date.getSeconds();

var fixed_second = fixNumber(the_second);

//put together the string and alert with it

var the_time = the_hour + ":" + fixed_minute + ":" + fixed_second;

alert("The time is now: " +the_time);

}

假定時間鏈接被點擊時,時間為12:04:05。用new Date()獲得
日期,用getHours()獲得小時,用前面所屬方法獲得分鍾,分
鍾在本例中應該是4, 然後調用fixNumber,其參數為the_minute:

var fixed_minute = fixNumber(the_minute);

當fixNumber()被調用時,參數the_number被設置為the_minute。
在本例中由於the_minute是4,所以the_number將被設置為4。
設置完參數後,我們進入函數主體。由於4小於10,the_number
被改變為"04",然後the_number值用return指令返回。當"04"
被fixNumber返回後,本例fixed_minute就等於"04"。

我們一步一步來研究該過程。假定時間為12:04:05。

我們從函數announceTime()開始
the_minute = the_date.getMinutes();則the_minute = 4
fixed_minute = fixNumber(the_minute);等於函
數fixNumber()並將其值返回給fixed_minute
現在進入函數fixNumber()
函數fixNumber(the_number)fixNumber()用the_minute的
值調用,the_minute值是4,所以現在the_number = 4
如果(the_number < 10) {the_number = "0" +
the_number;}由於4小於10,所以the_number現在等於"04"
返回the_number值,退出該函數並返回值"04"
現在已經退出函數fixTime(),所以現在我們回
到announceTime()

該函數返回值為"04",所以fixed_minute 現在等於"04"
該例用了一個只有一個參數的函數。實際上你可以為函數
設置多個參數。例如該函數輸入兩個數組並返回一個元素
列表。

第十四頁:多於一個參數的函數

這是我定義的一個數組:

var monkeys = new Array("mattmarg","wendy",
"kristin","tim","aaron", "luke");

var kittyphile = new Array("wendy", "ruby",
"roscoe", "tim");

var discophile = new Array("mattmarg",
"john travolta", "wendy");

var happy = new Array("tim", "wendy",
"stimpy", "aaron");

var cranky = new Array("ren", "mattmarg","luke");

隨著這些數組的定義,arrayIntersect函數給出,我們可輕
而易舉的發現那些網猴酷愛迪斯科:愛跳舞的網猴

注意到盡管John Travolta喜愛迪斯科,但他不在monkeys請
單中,則他就不是只愛跳舞的網猴為調用該函數值,可這么來:

<a href="#" onClick="arrayIntersect('dancing
monkeys',monkeys,discophile);">dancing monkeys</a>

這是個具有3個參數的函數:一個代表交叉的姓名,第一個數組,
及第二個數組。這也很容易發現愛貓的網猴名愛貓的網猴。

看一下源碼:

<a href="#" onClick="arrayIntersect('monkeys who love
cats',monkeys,kittyphile);">cat-loving monkeys</a>

讓我們看看arrayIntersect函數本身:

function arrayIntersect(intersect_name, array_1, array_2)

{

var the_list = "";

for (loop_1 = 0; loop_1 < array_1.length; loop_1++)

{

for (loop_2 = 0; loop_2 < array_2.length; loop_2++)

{

if (array_1[loop_1] == array_2[loop_2])

{

the_list = the_list + array_1[loop_1] + " ";

}

}

}

alert("the " + intersect_name + " are: "+ the_list);

}

看看你是否已經弄懂本例中的循環。關鍵是函數第一行:

function arrayIntersect(intersect_name, array_1, array_2)

這里定義了一個叫arrayIntersect的函數,它有3個參數。就象上
例,每個參數就象一個變數,當函數調用時賦值。因此,當函數被調
用時:

arrayIntersect('dancing monkeys',monkeys,discophile);

下列分配:

intersect_name = 'dancing monkeys'
array_1 = monkeys
array_2 = discophile
唯一需注意的是,你必須以正確的參數數目來調用函數。如果你一旦
象這樣調用arrayIntersect:

arrayIntersect(monkeys,discophile);

將會出錯。試一下看會發生什麼錯誤。

在任一標準的Javascript程序中,函數都是基本的部件。因此理解其
工作原理極其重要。這里是一個測試你對這項工作理解多少的練習。
再綜合地做一下本課中其它練習,再在你自己的瀏覽器中應用。

Ⅳ Java htmlunit click 方法點擊沒反應怎麼回事

解決思路如下:
第三個tr點擊的時候其實是有反應的 是有向伺服器請求數據的 不過不知道為啥htmlunit沒有給我做修改頁面代碼的操作 不過既然有發request 那就會有response 既然有response response里就一定有我要的數據
首先先:
MainService.page = subGroup.getValue().click(); //模擬點擊 向伺服器發送請求 用一個HtmlPage對象接著
WebResponse res = MainService.page.getWebResponse(); //獲取最近請求的響應
String html = res.getContentAsString(); //將響應變為字元串

接下來變為字元串之後 就可以做想做的操作了 因為我只是要一個URL地址 所以 接下來我做了切割字元串的操作 得到我要的url
int endNum = html.indexOf(subGroup.getValue().asText()); //操作字元串 拿到url
String str = html.substring(0, endNum);
int beginNum = str.lastIndexOf(URL的特有起始欄位);
String str2 = html.substring(beginNum, endNum);
int buffer = str2.length()-str2.indexOf("\"");
String url = html.substring(beginNum, endNum-buffer);
因為網頁代碼的緣故 我有一些特別的操作 不過上面幾行代碼就是從response里獲得url的過程 這個過程要根據網頁的不同具體分析的

接下來只要將得到的url送給getPage方法就能得到正常的頁面了
MainService.page = wc.getPage(url);

Ⅳ 按鍵精靈 獲取網頁按鈕.click後生成的源碼

無刷新載入了些源碼,是因為網頁採用的是 Ajax 技術,使用 Javascript 動態獲取伺服器的返回信息,然後寫入網頁之中。

想要獲取這一段源碼,那就只有執行這一段 JS 代碼,否則只是獲取網頁源碼是靜態的。

執行 JS 解析一般用 Chrome 的 V8 引擎,這在 PHP、Node.js 等腳本語言中廣泛使用,至於 VB,,因該也是沒問題的,畢竟那個引擎是開源的。

但我覺得還是算了吧,還是換一個方式解決問退:

1、按鍵精靈創建一個瀏覽器窗口,滑鼠模擬點擊,然後滑鼠模擬復制操作,獲取數據。

2、網頁版按鍵精靈,直接調用 IE 解析網頁,也可以使用自帶的 Plugin.Web.RunJS 命令直接運行 Javascript 語句,直接返回需要的數據。

================
希望我的回答對你有幫助!

Ⅵ jquery $('#btn').click與$("#btn").live("click",function()有什麼區別

1、延時綁定事件功能不同:

jquery $('#btn').click在文檔流中,後續通過腳本動態添加的元素(符合 id="#btn"),是沒有綁定click事件的。

$("#btn").live("click",function()後續通過腳本動態添加的元素(符合 id="#btn"),也是綁定了click事件的。如何使用 live() 方法向尚未創建的元素添加事件處理器。

live()可以將事件綁定到當前和將來的元素(eg:為id=zy元素綁定點擊事件,而當用js動態生成一個節點並插入到dom文檔結構中時,如果是用bind()綁定的,怎麼新插入的節點將不會有該bind綁定事件。而live()則可以);

2、綁定方式不同:

.live()則是通過冒泡的方式來綁定到元素上的。更適合列表類型的,綁定到DOM節點上。而click()是直接綁定在元素上。

3、底層API支持不同:

click()方法:在jqeury事件處理API中,bind()是其API基礎。click(),mouseover(),mousermove等來處理事件,真正起作用的是bind()。而這些方法都只是輔助作用(別名函數),簡化使用。都只有一個參數(觸發事件時執行的回調函數)。live()不同,不依賴bind()API。

Ⅶ 用javascript的click()方法 能模擬點擊這個「<div id="go">用戶登錄</div>「

可以直接調用click,示例如下:

<html>
<head>
</head>
<body>
<inputtype="button"onclick="FangFa()"value="事件"id="btn"/>

</body>
</html>

<scripttype="text/javascript">
functionFangFa()
{
alert("你單擊了按鈕");
A=newLei();
A.HanShuA();

}

document.getElementById("btn").click();

</script>


還有的話,直接調用click所引用的函數也是可以的

Ⅷ 如何觸發jquery.nestable樹節點的click事件

從源碼來看, 綁定在樹節點的click事件, 會因為先觸發內部的onmousedown, 調用dragStart方法而導致原DOM節點被移除, 繼而導致click事件無法觸發;

這里在不修改源碼的前提下提供兩個方案:
1. click事件換成mousedown事件
2. 通過對源碼onStartEvent方法的分析, 在樹節點上放一個button將樹節點的"拖拽開始"和"點擊事件"分離(注意這里的button需要不同於nestable自己的折疊按鈕的樣式設定)

舉個栗子:

<!DOCTYPEhtml>
<htmllang="en">
<head>
<metaname="author"content="sleest">
<metaname="description"content="nestableexampleforitemclick,2017/08/23">
<title>Document</title>
<metacharset="utf-8">
<style>
.dd{
position:relative;
display:block;
list-style:none;
line-height:1.5;
}
.dd-list{
display:block;
position:relative;
padding:0;
list-style:none;
}
.dd-list.dd-list{
padding-left:2rem;
}
.dd-collapsed.dd-list{
display:none;
}

.dd-item,
.dd-empty,
.dd-placeholder{
display:block;
position:relative;
min-height:20px;
line-height:1.5;
}

.dd-handle{
display:block;
height:30px;
margin:5px0;
padding:5px10px;
border:1pxsolid#ccc;
background:#fff;
box-sizing:border-box;
-moz-box-sizing:border-box;
}
.dd-handle:hover{
color:#2ea8e5;
}

/*注意這里只設置nesttable自帶折疊按鈕的樣式*/
.dd-item>button[data-action]{
display:block;
position:relative;
cursor:pointer;
float:left;
width:25px;
height:20px;
margin:5px0;
padding:0;
text-indent:100%;
white-space:nowrap;
overflow:hidden;
border:0;
background:transparent;
font-size:12px;
line-height:1;
}
/*注意這里只設置nesttable自帶折疊按鈕的樣式*/
.dd-item>button[data-action]:before{
content:'+';
display:block;
position:absolute;
width:100%;
text-align:center;
text-indent:0;
}
.dd-item>button[data-action="collapse"]:before{
content:'-';
}

.dd-placeholder,
.dd-empty{
margin:5px0;
padding:0;
min-height:30px;
background:#f2fbff;
border:1pxdashed#b6bcbf;
box-sizing:border-box;
-moz-box-sizing:border-box;
}
.dd-empty{
border:1pxdashed#bbb;
}

.dd-dragel{
position:absolute;
pointer-events:none;
z-index:9999;
}
.dd-dragel>.dd-item.dd-handle{
margin-top:0;
}
.dd-dragel.dd-handle{
-webkit-box-shadow:2px4px6px0rgba(0,0,0,.1);
box-shadow:2px4px6px0rgba(0,0,0,.1);
}
</style>
</head>
<body>
<divclass="dd">
<olclass="dd-list">
<liclass="dd-item"data-id="1">
<divclass="dd-handle">Item1</div>
<buttonid="btn-demo"style="position:absolute;top:0;right:0;">AButton</button>
</li>
<liclass="dd-item"data-id="2">
<divclass="dd-handle">Item2</div>
</li>
<liclass="dd-item"data-id="3">
<divclass="dd-handle">Item3</div>
<olclass="dd-list">
<liclass="dd-item"data-id="4">
<divclass="dd-handle">Item4</div>
</li>
<liclass="dd-item"data-id="5">
<divclass="dd-handle">Item5</div>
</li>
</ol>
</li>
</ol>
</div>
<scriptsrc="https://cdn.bootcss.com/jquery/3.2.1/jquery.slim.js"></script>
<scriptsrc="https://cdn.bootcss.com/Nestable/2012-10-15/jquery.nestable.js"></script>
<script>
functionsomeEvent(event){
console.log(this,event.type);
}
$('.dd').nestable();
$('body').on('mousedown','.dd-item',someEvent);
$('body').on('click','#btn-demo',someEvent);
</script>
</body>
</html>

結果:

android TV開發焦點移動源碼分析

點可以理解為選中態,在Android TV上起很重要的作用。一個視圖控制項只有在獲得焦點的狀態下,才能響應按鍵的Click事件。
相對於手機上用手指點擊屏幕產生的Click事件, 在TV中通過點擊遙控器的方向鍵來控制焦點的移動。當焦點移動到目標控制項上之後,按下遙控器的確定鍵,才會觸發一個Click事件,進而去做下一步的處理
在處理焦點的時候,有一些基礎的用法需要知道。
首先,一個控制項isFocusable()需要為true才有資格可以獲取到焦點。如果想要在觸摸模式下獲取焦點,需要通過setFocusableInTouchMode(boolean)來設置。也可以直接在xml布局文件中指定:

keyEvent 分發過程:

而當按下遙控器的按鍵時,會產生一個按鍵事件,就是KeyEvent,包含「上」,「下」,「左」,「右」,「返回」,「確定」等指令。焦點的處理就在KeyEvent的分發當中完成。
首先,KeyEvent會流轉到ViewRootImpl中開始進行處理,具體方法是內部類 ViewPostImeInputStage 中的 processKeyEvent :

接下來先看一下KeyEvent在view框架中的分發:

這里也是可以做焦點控制,最好是在 event.getAction() == KeyEvent.ACTION_DOWN 進行.
因為android 的 ViewRootlmpl 的 processKeyEvent 焦點搜索與請求的地方 進行了判斷if (event.getAction() == KeyEvent.ACTION_DOWN)

• 首先ViewGroup會一層一層往上執行父類的dispatchKeyEvent方法,如果返回true那麼父類的dispatchKeyEvent方法就會返回true,也就代表父類消費了該焦點事件,那麼焦點事件自然就不會往下進行分發。
• 然後ViewGroup會判斷mFocused這個view是否為空,如果為空就會return false,焦點繼續往下傳遞;如果不為空,那就會return mFocused的dispatchKeyEvent方法返回的結果。這個mFocused其實是ViewGroup中當前獲取焦點的子View

發現執行了onKeyListener中的onKey方法,如果onKey方法返回true,那麼dispatchKeyEvent方法也會返回true
如果想要修改ViewGroup焦點事件的分發
• 重寫view的dispatchKeyEvent方法
• 給某個子view設置onKeyListener監聽

下面再來看一下如果一個頁面第一次進入,系統是如何確定焦點是定位在哪個view上的

由於DecorView繼承自FrameLayout,這里調用的是ViewGroup的requestFocus

descendantFocusability:
• FOCUS_AFTER_DESCENDANTS:先分發給Child View進行處理,如果所有的Child View都沒有處理,則自己再處理
• FOCUS_BEFORE_DESCENDANTS:ViewGroup先對焦點進行處理,如果沒有處理則分發給child View進行處理
• FOCUS_BLOCK_DESCENDANTS:ViewGroup本身進行處理,不管是否處理成功,都不會分發給ChildView進行處理
因為 PhoneWindow 給 DecoreView 初始化時設置 了 setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS),所以這里默認是FOCUS_AFTER_DESCENDANTS

到此第一次請求焦點的過程基本告一個段落

焦點移動的時候,默認的情況下,會按照一種演算法去找在指定移動方向上最近的鄰居。在一些情況下,焦點的移動可能跟開發者的意圖不符,這時開發者可以在布局文件中使用下面這些XML屬性來指定下一個焦點對象:

在KeyEvent分發中已經知道如果分發過程中event沒有被消耗,就會根據方向搜索以及請求焦點View

流程一:查找用戶指定的下一個焦點

流程二:獲取搜索方向上所有可以獲取焦點的view,使用演算法查找下一個view
addFocusables() 獲取搜索方向上可獲得焦點的view

descendantFocusability屬性決定了ViewGroup和其子view的聚焦優先順序
• FOCUS_BLOCK_DESCENDANTS:viewgroup會覆蓋子類控制項而直接獲得焦點
• FOCUS_BEFORE_DESCENDANTS:viewgroup會覆蓋子類控制項而直接獲得焦點
• FOCUS_AFTER_DESCENDANTS:viewgroup只有當其子類控制項不需要獲取焦點時才獲取焦點
addFocusables 的第一個參數views是由root決定的。在ViewGroup的focusSearch方法中傳進來的root是DecorView,也可以主動調用FocusFinder的findNextFocus方法,在指定的ViewGroup中查找焦點。
FocusFinder.findNextFocus 查找焦點

閱讀全文

與click源碼分析相關的資料

熱點內容
伺服器怎麼找到列印機 瀏覽:803
單片機的浮點運算 瀏覽:380
phpsmarty是干什麼 瀏覽:332
智能控制模糊控制及演算法的論文 瀏覽:611
畫單片機最小系統 瀏覽:830
外包程序員35歲以後干什麼 瀏覽:107
java怎麼重新編譯class文件 瀏覽:571
pythonweb開發與介面測試用例 瀏覽:396
python必背筆記 瀏覽:319
陳鋒羽婷的小說 瀏覽:464
安卓怎麼下載正版刺激戰場 瀏覽:235
xrv本田壓縮比 瀏覽:63
空調耗電量手機app怎麼看 瀏覽:723
伺服器怎麼登錄u8 瀏覽:909
明星pdf 瀏覽:270
判斷手機訪問php 瀏覽:119
appstory怎麼設密碼 瀏覽:798
程序員月薪3萬 瀏覽:261
flash反編譯覆蓋碼怎麼找 瀏覽:196
女大男小忘年戀題材電影 瀏覽:83