te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - HTML changes with element.setAttribute("onclick","alert('Test');&quo
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - HTML changes with element.setAttribute("onclick","alert('Test');&quo

programmeradmin3浏览0评论

I got surprised when paring the following cases:

button = document.getElementById("addSugerenciaButton");

if (button != null) {
   button.onclick = "post_to_url('" + addSugerenciaURL + "', idBuzon', '" + id + "');";
}

button = document.getElementById("removeBuzonButton");

if (button != null) {
    button.onclick = function() {
        if (!confirm(removeSugerenciaMessage)) {
            return false; 
        };
        post_to_url(removeBuzonURL, 'idBuzon', id);
    };
}

button = document.getElementById("editBuzonButton");

if (button != null) {
    button.setAttribute("onclick","post_to_url('" + editBuzonURL + "', 'idBuzon', '" + id + "');");
}

Just the latter appeared to change the HTML (at least inspecting with Firebug) whilst the rest, although working properly too, they didn't show any onclick event in the editBuzonButton element.

Any ideas why this is happening?

I got surprised when paring the following cases:

button = document.getElementById("addSugerenciaButton");

if (button != null) {
   button.onclick = "post_to_url('" + addSugerenciaURL + "', idBuzon', '" + id + "');";
}

button = document.getElementById("removeBuzonButton");

if (button != null) {
    button.onclick = function() {
        if (!confirm(removeSugerenciaMessage)) {
            return false; 
        };
        post_to_url(removeBuzonURL, 'idBuzon', id);
    };
}

button = document.getElementById("editBuzonButton");

if (button != null) {
    button.setAttribute("onclick","post_to_url('" + editBuzonURL + "', 'idBuzon', '" + id + "');");
}

Just the latter appeared to change the HTML (at least inspecting with Firebug) whilst the rest, although working properly too, they didn't show any onclick event in the editBuzonButton element.

Any ideas why this is happening?

Share Improve this question edited Feb 11, 2010 at 8:45 Juan Carlos Blanco Martínez asked Feb 9, 2010 at 15:42 Juan Carlos Blanco MartínezJuan Carlos Blanco Martínez 1,9776 gold badges25 silver badges29 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 8

Yes. setAttribute adds an attribute to an Element DOM node. For the onclick attribute, there is a side effect under the covers of also adding an onclick event handler, which is made by 'piling' the attribute value into a javascript function.

Assigning a function to the onclick property of the element directly does attach the handler, but does not automatically add an attribute to the DOM node.

Now it is possible that there are browsers that do not make the distinction between adding the attribute and attaching the handler directy. But keep in mind that although modifying the document may create scriptable objects as side effect, the reverse does not have to be the case: programmatically creating DOM structures may or may not change the HTML underlying the document according to the browser you happen to be using.

Although we all know that the most standard way to set the onclick event within an HTML element is through element.onclick = "alert('Example');";,

Wrong.

You should use addEventListener / attachEvent.

For example:

if (element.addEventListener) {
    element.addEventListener('click', handler, false); 
} else if (el.attachEvent) {
    element.attachEvent('onclick', handler);
}

In JavaScript in browsers, you're much better off not having anything to do with attributes if you can possibly avoid it, which you almost always can. In the case of event handler attributes, IE behaves differently to all other browsers (see Why does an onclick property set with setAttribute fail to work in IE? for a discussion on this). Just use properties wherever you can, and unless there's a possibility you will need multiple event handlers, the easiest option is to use the old DOM0 event handler properties and make sure you assign them a function. In this case, using your last example:

button.onclick = function() {
    post_to_url(editBuzonURL, 'idBuzon', id);
};

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论