开发者

nextsibiling doesn't work

this is a sample code of what I am doing. unfortunately the alert(nextElem.value) returns "undefined" when I click the second checkbox to get the href of the link after开发者_JAVA技巧 it. do you have any idea how to fix it?

   <HTML>
<HEAD>
<TITLE>Checkbox Inspector</TITLE>
<SCRIPT LANGUAGE="JavaScript">

function validate()
{
    for (i = 0; i <(document.f1.checkThis.length) ; i++) {
        if (document.f1.checkThis[i].checked) {
            var elem = document.f1.checkThis[i];
            var nextElem = elem.nextSibling; 
            alert(nextElem.href);
            }
        }
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="f1">
<INPUT TYPE="checkbox" NAME="checkThis" value="http://www.google.com" onClick="validate()">Check here<BR>
<a href="http://www.google.com">click here</a>    
</FORM>
</BODY>
</HTML>


Get the link's href with jQuery

http://jsfiddle.net/mplungjan/H9Raz/ :

$('form input:checkbox').click(function () {
 alert($(this).nextAll('a').attr("href"));
});

Because of the BRs we need the nextAll, surprisingly since I was using the next selector with an "a"

See here why it did not work: Cleanest way to get the next sibling in jQuery


Get the link's href with forms access and usage of ID - no jQuery

http://jsfiddle.net/mplungjan/fKE3v/

window.onload=function() {
  var chks = document.getElementsByName('checkThis');
    for (var i=0;i<chks.length;i++) {
        chks[i].onclick=function() {
            var id = this.id;
            var linkId="link_"+id.split("_")[1]
            alert(document.getElementById(linkId).href)
        }
    }
}
<form>
  <div>
    <input type="checkbox" name="checkThis" id="chk_1" value="http://www.google.com" />Check here<br/>
    <a href="http://www.google.com" id="link_1">click here</a><br>   
    <input type="checkbox" name="checkThis" id="chk_2" value="http://www.bing.com" />Check here<br/>
    <a href="http://www.bing.com" id="link_2">click here</a>       
  </div>
</form>

Forms access to get the next checkbox

<INPUT TYPE="checkbox" NAME="checkThis" value="http://www.google.com" onClick="validate(this.form)">Check here<BR>
<INPUT TYPE="checkbox" NAME="checkThis"  onClick="validate(this.form)">Check here2<BR>
function validate(theForm) {
    var chk = theForm.checkThis
    for (i = 0; i <chk.length) ; i++) {
        if (chk[i].checked) {
            var nextElem = chk[i+1]; 
            if (nextElem) alert(nextElem.value);
        }
    }
}


Your problem is that nextElem is the text node immediately after your checkbox, not the next checkbox; text nodes don't have value attributes. For example, try this:

function validate() {
    for (i = 0; i < (document.f1.checkThis.length); i++) {
        if (document.f1.checkThis[i].checked) {
            var elem = document.f1.checkThis[i];
            var nextElem = elem.nextSibling;
            alert(nextElem);
            alert(nextElem.value);
        }
    }
}

Or, for your convenience:

http://jsfiddle.net/ambiguous/sUzBL/1/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜